mysql - 所有分组计数 (*) 的总和以及排序依据和限制(包括 fiddle)
mysql - total sum of all grouped count(*) 's with order by and limit (fiddle included)
无法弄清楚这一点...我知道下面有什么问题,但不确定如何获得我想要的结果。如果没有大量额外的重构,就不可能有两个单独的查询,我想通过这样做来避免这是一个查询......即使 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)。问题是 "windowing execution occurs before ORDER BY, LIMIT, and SELECT DISTINCT" 所以总数最终是错误的......它是所有行的总数而不是 'top 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]
值的总和。
FIDDLE : https://www.db-fiddle.com/f/agn932Q9eXxhcm3CE26THe/2
您可以先在子查询中聚合和限制,然后计算总计:
SELECT t.*, SUM(total) OVER() AS TotalSum
FROM (
SELECT event_target AS Name, COUNT(*) AS Total
FROM data_logs
GROUP BY Name
ORDER BY Total DESC
LIMIT 10
) t
无法弄清楚这一点...我知道下面有什么问题,但不确定如何获得我想要的结果。如果没有大量额外的重构,就不可能有两个单独的查询,我想通过这样做来避免这是一个查询......即使 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)。问题是 "windowing execution occurs before ORDER BY, LIMIT, and SELECT DISTINCT" 所以总数最终是错误的......它是所有行的总数而不是 'top 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]
值的总和。
FIDDLE : https://www.db-fiddle.com/f/agn932Q9eXxhcm3CE26THe/2
您可以先在子查询中聚合和限制,然后计算总计:
SELECT t.*, SUM(total) OVER() AS TotalSum
FROM (
SELECT event_target AS Name, COUNT(*) AS Total
FROM data_logs
GROUP BY Name
ORDER BY Total DESC
LIMIT 10
) t