我有一张表,我需要计算一些值的总和,然后取每个总和的最大值。 我的代码如下:
SELECT q1.prod_code, q1.cust_code, MAX(q1.total_sum)
FROM (SELECT k2.prod_code, k2.cust_code, SUM(k2.price) AS total_sum FROM reservation AS k2 GROUP BY k2.prod_code, k2.cust_code) AS q1
GROUP BY q1.prod_code
从上面我得到了几乎正确的结果。 我必须得到:
prod_code | cust_code | total_sum
1001 | 10002 | 75个
1002 | 10005 | 209个
1003 | 10005 | 350个
1004 | 10002 | 650
但不是这样,我得到了:
prod_code | cust_code | total_sum
1001 | 10001 | 75个
1002 | 10001 | 209个
1003 | 10003 | 350个
1004 | 10001 | 650
实际上,cust_code是子查询中每个单独prod_code的第一个值。
你知道可能出现什么问题吗?
答案 0 :(得分:0)
正如我的评论中所述,mysql
允许您从group by
子句中省略非聚合字段。在这样做时,您无法保证这些省略值的结果。
要解决您的问题,您需要将join
合并后的查询返回原始查询。虽然使用多个聚合不是很漂亮,但这样的事情应该有效:
SELECT t1.prod_code, t2.cust_code, t1.max_total_sum
FROM (
SELECT prod_code, MAX(total_sum) max_total_sum
FROM (
SELECT prod_code, cust_code, SUM(price) AS total_sum
FROM reservation
GROUP BY prod_code, cust_code) AS q1
GROUP BY prod_code
) t1 JOIN (
SELECT prod_code, cust_code, SUM(price) AS total_sum
FROM reservation
GROUP BY prod_code, cust_code) AS t2 ON t1.prod_code = t2.prod_code
AND t1.max_total_sum = t2.total_sum