#sql-server #group-by #aggregate-functions
#sql-сервер #группировать по #агрегат-функции
Вопрос:
У меня есть следующие данные.
Property, Value
Odd,1
Even,2
Odd,3
Even,4
Odd,5
Even,6
С помощью GROUP BY
SELECT Property, COUNT(*) FROM Tab1 GROUP BY Property
Результат:
Property, COUNT(*)
Odd 3
Even 3
Но когда я использую агрегатную функцию, она возвращает повторяющиеся значения.
SELECT property,count(*) over (partition by property) AS count
FROM Tab1;
Результат
Property, count
Even 3
Even 3
Even 3
Odd 3
Odd 3
Odd 3
Я хочу тот же результат, что и при использовании GROUP BY.
SELECT property, count FROM (
SELECT property,count(*) over (partition by property) AS count
FROM Tab1) AS tab2;
Есть ли какой-либо другой метод, кроме этого?
Ответ №1:
Вот как работают оконные функции; вы получаете строку, возвращаемую для каждой строки в исходной таблице, а не агрегированную строку, как при использовании GROUP BY
. Вы можете достичь того же результата, используя SELECT DISTINCT
:
SELECT DISTINCT property,
COUNT(*) OVER (PARTITION BY property) AS count
FROM Tab1