Как определить топ х строк с группой по - SQL Server 2017 - PullRequest
1 голос
/ 23 апреля 2020

У меня есть набор данных, который выглядит следующим образом:

| Category | Employee | Output |
|:--------:|:--------:|:------:|
|    Top   |     A    |   97   |
|    Mid   |     B    |   50   |
|    Mid   |     C    |   35   |
|    Mid   |     D    |   45   |
|    Low   |     E    |   15   |
|    Low   |     F    |   16   |
|    Top   |     G    |   92   |
|    Top   |     H    |   84   |
|    Mid   |     I    |   49   |
|    Mid   |     J    |   31   |
|    Low   |     K    |   22   |
|    Top   |     L    |   79   |
|    Mid   |     M    |   63   |
|    Mid   |     N    |   33   |
|    Low   |     O    |   19   |
|    Mid   |     P    |   33   |
|    Top   |     Q    |   77   |
|    Top   |     R    |   88   |
|    Low   |     S    |   30   |
|    Mid   |     T    |   53   |
|    Mid   |     U    |   68   |
|    Mid   |     V    |   72   |
|    Mid   |     W    |   66   |
|    Mid   |     X    |   51   |
|    Mid   |     Y    |   35   |
|    Mid   |     Z    |   70   |

(Реальный набор данных намного больше, примерно на ~ 20 тыс. Строк)

Я пытаюсь найти первые 3 вывода номера для каждой группы. В итоге получается набор данных, такой как:

| Low | 30 |
|:---:|:--:|
| Low | 22 |
| Low | 19 |
| Mid | 72 |
| Mid | 70 |
| Mid | 68 |
| Top | 97 |
| Top | 92 |
| Top | 88 |

Я попробовал:

    SELECT TOP 10
        Category,
        Output

    FROM
        raw_data

    ORDER BY    
        Output DESC

Но в этом списке только 10 лучших, а не по категориям.

Добавление

GROUP BY Category, Count_Placements, очевидно, ничего не делает, и я не могу сгруппироваться по Category.

Извините, что SQL Fiddle нет, как у меня обычно , в настоящее время он не работает .

1 Ответ

2 голосов
/ 23 апреля 2020

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

select category, output
from (
    select t.*, row_number() over(partition by category order by output desc) rn
    from mytable t
) t
where rn <= 3
order by category, output desc
...