Как увидеть результаты COUNT только для верхних значений в таблице, а не для всей таблицы в sql

Я создаю базу данных для своих счетов за коммунальные услуги в 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

Извините, я не понимаю вопроса. Вам нравится иметь первые 10 месяцев, или подсчеты должны определяться только 10 лучшими счетами за каждый месяц? Подход может иметь подзапрос. Поэтому выберите только верхние 10 строк (например, используйте классифицировать ), тогда вы сможете сгруппировать и подсчитать их идеально.

erelguitars 05.05.2022 07:59
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
1
43
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
  1. Я предполагаю, что вы используете SQL Server, а не MySQL.
  2. Просто чтобы уточнить, что вы хотите получить 10 самых высоких сумм счетов за электроэнергию и посмотреть, приходится ли каждая из них на какой месяц.
  3. Проверено на dbfiddle
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;

Это сработало отлично и отправило меня в кроличью нору для исследования оконных функций. Спасибо.

cynrode 05.05.2022 19:03

Другие вопросы по теме