Найти наиболее распространенное значение для идентификатора - PullRequest
1 голос
/ 20 марта 2020

Я совершенно новичок в SQL, и я только начинаю изучать это. Теперь у меня есть этот вопрос для задания, которое я просто не могу понять. Я покажу вам ниже:

Теперь вопрос: Для каждого года награждения на Оскаре, перечислите наиболее успешный жанр.

Я не могу понять это не могли бы вы мне помочь?

+------+------+---------+------+
| o_id | year |  genre  | a_id |
+------+------+---------+------+
|    1 | 2016 | Action  | 1001 |
|    2 | 2016 | Action  | 1002 |
|    3 | 2016 | Romance | 1015 |
|    4 | 2017 | Action  | 1014 |
|    5 | 2017 | Romance | 1006 |
|    6 | 2017 | Romance | 1003 |
|    7 | 2018 | Fantasy | 1011 |
|    8 | 2019 | Fantasy | 1011 |
|    9 | 2019 | Action  | 1009 |
|   10 | 2019 | Fantasy | 1001 |
|   11 | 2020 | Action  | 1015 |
|   12 | 2020 | Romance | 1005 |
|   13 | 2020 | Fantasy | 1001 |
|   14 | 2020 | Action  | 1014 |
|   15 | 2020 | Action  | 1009 |
+------+------+---------+------+

Я пробовал это, но вывод не тот выход, который мне нужен. Этот код только дает мне отдельное значение для каждого года:

select distinct  (year) year, most_frequent_value from (
SELECT year, genre AS most_frequent_value, count(*) as _count
FROM Oscar
GROUP BY year, genre) a
ORDER BY year, _count DESC 

1 Ответ

0 голосов
/ 20 марта 2020

Wit row_number() оконная функция:

select t.year, t.genre
from (
  select year, genre, 
    row_number() over (partition by year order by count(*) desc) rn
  from Oscar
  group by year, genre
) t
where t.rn = 1

См. Демоверсию . Результаты:

| year | genre   |
| ---- | ------- |
| 2016 | Action  |
| 2017 | Romance |
| 2018 | Fantasy |
| 2019 | Fantasy |
| 2020 | Action  |

Если вы хотите связать результаты, используйте rank() вместо row_number().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...