我在这里读过多篇关于类似问题的帖子,但似乎没有一篇能回答我的问题。
我有一个表,works\u on,其中包含了员工参与项目的所有时间:
id pno hours
123456789 1 32.50
123456789 2 7.50
333445555 2 10.00
333445555 3 10.00
333445555 10 10.00
...
以及另一个表,project,给出了表中每个相应项目编号(pno)的名称:
pname pno location
ProductX 1 Bellaire
ProductY 2 Sugarland
ProductZ 3 Houston
Computerization 10 Stafford
...
我正在尝试获取聚合小时数最高的项目的名称,而不使用selecttop或limit约束,因为我们不知道有多少个“max”值。
我可以把时间加起来:
SELECT p.pname, sub.hours FROM company.project p
JOIN
(SELECT w.pno, SUM(IFNULL(w.hours, 0)) AS hours FROM company.works_on w
GROUP BY w.pno) AS sub
ON p.pnumber = sub.pno;
返回结果:
pname hours
ProductX 52.50
ProductY 37.50
ProductZ 50.00
Computerization 55.00
Reorganization 25.00
Newbenefits 55.00
i、 e,计算机化和newbenefits应该是理想的回报,因为他们有最高的聚合小时,但我似乎不能执行max查询,给我这个结果。
是否有解决方法来选择最大结果而不使用top或sort/limit约束?
1条答案
按热度按时间piok6c0g1#
如果没有分析函数的帮助,在mysql中很难做到这一点。有一种方法:
如果您使用的是mysql 8+或更高版本,那么我们可以利用
RANK()
: