Не могу понять это ... Я знаю, что не так с нижеприведенным, но не знаю, как go получить желаемые результаты. Наличие двух отдельных запросов невозможно без большого количества дополнительного рефакторинга, которого я хочу избежать, выполняя этот запрос - один запрос ... даже если 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]
значений.
FIDDLE: https://www.db-fiddle.com/f/agn932Q9eXxhcm3CE26THe/2