存在更好的方法来执行以下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

提前致谢。

===============>>#1 票数:4

SELECT a, total FROM 
(SELECT a AS a, SUM(COUNT) AS total
FROM table1
GROUP BY a) AS xyz 
HAVING total = MAX(total)

希望这对你有用

===============>>#2 票数:1

我认为您可以通过将HAVING子选择查询移入其on prequery来实现。 由于它将始终仅包含一行,因此您不需要任何“ 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

===============>>#3 票数:1 已采纳

此子查询仅执行一次,您不必费心创建任何其他查询可能会建议的预查询(尽管这样做仍然是正确的,只是不需要)。 数据库引擎将意识到,子查询没有使用任何依赖于查询其他部分的变量。 您可以使用EXPLAIN查看查询的执行方式。

有关此答案的更多信息: https : //stackoverflow.com/a/658954/1821029

===============>>#4 票数:1

该查询返回一行包含两列:

1-“ a”列的逗号分隔值列表,其中最大“ Total”

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。 该查询已经过测试。

  ask by gsi-frank translate from so

未解决问题?本站智能推荐: