是否有更好的方法来执行以下SQL查询的功能?我感觉table1将被搜索两次,可能是可以通过一些技巧来避免,并提高查询的效率,但我只是无法弄清楚如何;(这是查询(在MySQL中):
SELECT a, SUM(count)
FROM table1
GROUP BY a
HAVING SUM(count) = (SELECT SUM(count) as total FROM table1 GROUP BY a ORDER BY total DESC LIMIT 1)
目标是返回主要累积的数字,并累积。
将table1作为两个字段表,如:
a,count
1,10
1,30
1,0
2,1
2,100
2,4
3,10
4,50
4,55
该数据样本的结果是:
2,105
4,105
提前致谢。
答案 0 :(得分:4)
SELECT a, total FROM
(SELECT a AS a, SUM(COUNT) AS total
FROM table1
GROUP BY a) AS xyz
HAVING total = MAX(total)
希望这对你有用
答案 1 :(得分:1)
我认为您可以通过将HAVING子选择查询移动到其预查询中来实现。由于它总是包含一行,因此您不需要任何“JOIN”,并且每次应用HAVING时都不必重新计算COUNT(*)。做一次,然后其余的
SELECT
a,
SUM(count)
FROM
table1,
( SELECT SUM(count) as total
FROM table1
GROUP BY a
ORDER BY total DESC
LIMIT 1 ) PreQuery
GROUP BY
a
HAVING
SUM(count) = PreQuery.Total
答案 2 :(得分:1)
这个子查询只执行一次,你不必费心去创建任何预查询,因为其他答案可能会建议(虽然这样做仍然是正确的,只是不需要)。数据库引擎将意识到,子查询不使用任何依赖于查询其他部分的变量。您可以使用EXPLAIN
查看查询的执行方式。
有关此答案中的主题的更多信息: https://stackoverflow.com/a/658954/1821029
答案 3 :(得分:1)
此查询返回一行,其中包含两列:
1-“a”列的逗号分隔值列表,其中包含最大的“总计”
2-和最大总值
select group_concat(a), Total
from
(select a, sum(count) as Total
from table1
group by a) OnTableQuery
group by Total
order by Total desc
limit 1
请注意,它只查询一次table1。该查询已经过测试。