【问题标题】:how to get the MAX() from a SUM() subquery in SQL如何从 SQL 中的 SUM() 子查询中获取 MAX()
【发布时间】:2016-02-29 04:14:58
【问题描述】:

我有一个表格,我需要从中计算一些值的总和,然后取每个总和的最大值。 我的代码如下:

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

从上面我得到了几乎正确的结果。 我必须得到:

产品代码 |客户代码 |总和
1001 | 10002 | 75
1002 | 10005 | 209
1003 | 10005 | 350
1004 | 10002 | 650

但我得到的不是这个:

产品代码 |客户代码 |总和
1001 | 10001 | 75
1002 | 10001 | 209
1003 | 10003 | 350
1004 | 10001 | 650

实际上,cust_code 是每个单独 prod_code 的子查询中的第一个值。

你知道可能出了什么问题吗?

【问题讨论】:

  • 我相信你的问题在于你的外部group byMysql 允许这样做,但大多数其他数据库不允许这样做。它基本上是返回一个随机的cust_code。您需要重新加入同一查询才能获得正确的查询。
  • 这可能是,但是如何将子查询与外部查询结合起来?

标签: mysql sum max


【解决方案1】:

正如我在评论中提到的,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

【讨论】:

  • @ToroLoco -- 我还没有测试过这个。看起来我把刚刚编辑的总和倒过来了。不知道为什么 prod_code 不起作用。
  • 不知何故mysql看不到它之外的子查询属性。
  • 好的,在我更改了总和后它现在可以工作了。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-27
  • 1970-01-01
  • 2021-03-08
相关资源
最近更新 更多