Как найти верхние N записей из метода 'group by', где N записей могут содержать несколько значений? - PullRequest
0 голосов
/ 12 января 2019

Я тренировался с W3 School SQL Tables . Из таблицы Customers я могу выбрать Количество клиентов по стране, следуя SQL

select country, count(*) as NumOfCustomer 
from Customers 
group by country
order by NumOfCustomer Desc;

Это дает мне такой результат:

enter image description here

Если я хочу выбрать 5 стран с большинством клиентов, я не могу использовать Limit 5, поскольку у Germany and France есть вторые по величине клиенты, а у Mexico and Spain пятые по величине клиенты. Предел использования 5 не будет включать Mexico and Spain

Как получить результат, содержащий все N число старших значений, где старшие значения могут повторяться для N-го числа, как и раньше?

1 Ответ

0 голосов
/ 12 января 2019

Вы можете использовать DENSE_RANK:

Возвращает ранг текущей строки в своем разделе без пробелов. Пиры считаются связями и получают одинаковый ранг. Эта функция присваивает последовательные ранги группам пиров; В результате группы размером больше единицы не дают несмежных ранговых чисел

WITH cte AS (
  select country, count(*) as NumOfCustomer 
  from Customers 
  group by country
), cte2 AS (
  SELECT *, DENSE_RANK() OVER(ORDER BY NumOfCustomer DESC) AS rnk
  FROM cte
)
SELECT *
FROM cte2
WHERE rnk <= 5
ORDER BY NumOfCustomer DESC
...