【发布时间】:2020-08-17 08:00:12
【问题描述】:
无法弄清楚这一点...我知道下面有什么问题,但不确定如何获得我想要的结果。如果没有大量额外的重构,就不可能有两个单独的查询,我想通过这样做来避免这是一个查询......即使 TotalSum 对于集合中的每个结果都是重复的。
SELECT
data_logs.event_target AS Name,
COUNT(*) AS Total,
SUM(COUNT(*)) OVER() AS TotalSum
FROM data_logs
GROUP BY Name
ORDER BY Total DESC
LIMIT 10
我想要TotalSum 成为所有分组 COUNT(*) 的总和(在本例中为 10)。问题是“窗口执行发生在 ORDER BY、LIMIT 和 SELECT DISTINCT 之前”,所以总数最终是错误的......它是所有行的总数,而不是我的限制的“前 10”。
Array
(
[0] => Array
(
[Name] => somename0
[Total] => 11
[TotalSum] => 61
)
[1] => Array
(
[Name] => somename1
[Total] => 4
[TotalSum] => 61
)
[2] => Array
(
[Name] => somename2
[Total] => 3
[TotalSum] => 61
)
[3] => Array
(
[Name] => somename3
[Total] => 2
[TotalSum] => 61
)
[4] => Array
(
[Name] => somename4
[Total] => 2
[TotalSum] => 61
)
[5] => Array
(
[Name] => somename5
[Total] => 2
[TotalSum] => 61
)
[6] => Array
(
[Name] => somename6
[Total] => 2
[TotalSum] => 61
)
[7] => Array
(
[Name] => somename7
[Total] => 1
[TotalSum] => 61
)
[8] => Array
(
[Name] => somename8
[Total] => 1
[TotalSum] => 61
)
[9] => Array
(
[Name] => somename9
[Total] => 1
[TotalSum] => 61
)
)
在上面的[TotalSum] 中,所有这些值都应该是 29...所有 10 个 [Total] 值的总和。
【问题讨论】:
标签: mysql sql group-by window-functions sql-limit