SQL:组合sum和max聚合函数

时间:2016-09-11 16:03:58

标签: mysql sql

如何从以下查询中获取最大值:

select sum(hours) from works_on group by pno;   
+------------+
| sum(hours) |
+------------+
|      52.50 |
|      50.00 |
|      55.00 |
|      25.00 |
|      55.00 |
+------------+

我想要的是:

|      55.00 |
|      55.00 |

提前致谢。

3 个答案:

答案 0 :(得分:3)

使用Having条款和Sub-query。像这样的东西

SELECT Sum(hours) 
FROM   works_on 
GROUP  BY pno 
HAVING Sum(hours) = (SELECT Sum(hours) h 
                     FROM   works_on 
                     GROUP  BY pno 
                     ORDER  BY h DESC 
                     LIMIT  1) 

SQL SERVER我们TOP 1 with Ties避免了sub-query

,这很容易

答案 1 :(得分:1)

如果您只想要最大值,则会有一行:

select sum(hours)
from works_on
group by pno
order by sum(hours) desc
limit 1;

我不确定为什么你会想要两行,但是Prdp的回答是正确的。

答案 2 :(得分:0)

或者,另一种只返回最大总和的方法,(仅一行)  是

Select Max(sumHrs)
From (Select sum(hours) sumHrs
      From works_on 
      gtoup by pno) z

我想知道,从已经是聚合的结果集返回多行的值是多少,而不是原始数据行。如果您想要的结果还包含pno值,那么我会理解(您想知道哪个pno具有最高的小时数),但要获得最大小时数不是似乎有很多价值。或者你只是留下了一部分问题;为了简单起见,它们是什么?