Я создаю базу данных для своих счетов за коммунальные услуги в SSMS18 и пытаюсь получить количество появления определенного месяца в первых 10 месяцах с самыми высокими счетами. Как ограничить функцию COUNT только подсчетом верхнего числа строк?
CREATE TABLE Electric (
[date] date NOT NULL,
electric_bill_amount smallmoney);
Я могу ограничить результаты, добавив оператор WHERE
SELECT DISTINCT DATENAME(MONTH, [date]) AS MONTH,
COUNT(DATENAME(MONTH, [date])) AS [Frequency]
FROM Electric
WHERE electric_bill_amount > 104
GROUP BY DATENAME(MONTH, [date])
ORDER BY [Frequency] DESC
но я хотел бы, чтобы мой запрос был более динамичным, и поэтому оператор count использовал только месяцы с 10 самыми высокими значениями.
Результаты должны выглядеть примерно так
August 3
September 3
July 2
January 1
December 1
SELECT DATENAME(MONTH, [date]) AS MONTH,
COUNT(DATENAME(MONTH, [date])) AS [Frequency]
FROM (
SELECT [date], electric_bill_amount, RANK() OVER(ORDER BY electric_bill_amount DESC) as r
FROM Electric
) tmp
WHERE r <= 10
GROUP BY DATENAME(MONTH, [date])
ORDER BY [Frequency] DESC;
Это сработало отлично и отправило меня в кроличью нору для исследования оконных функций. Спасибо.
Извините, я не понимаю вопроса. Вам нравится иметь первые 10 месяцев, или подсчеты должны определяться только 10 лучшими счетами за каждый месяц? Подход может иметь подзапрос. Поэтому выберите только верхние 10 строк (например, используйте классифицировать ), тогда вы сможете сгруппировать и подсчитать их идеально.