макс на счет в sql - PullRequest
       14

макс на счет в sql

0 голосов
/ 13 апреля 2020

Хотите получить игрока с максимальным количеством золотых медалей в каждом году пытался макс (количество ())

затем пытался

select olympic_name, player_name, max(medals) as max 
from (
  select olympic_name, player_name, count(medal) as medals 
  from olympics 
  where medal='Gold'
  group by olympic_name, player_name 
  order by medals desc 
) 
group by olympic_name,player_name 
order by max desc

+------------+--------------------+------+
|olympic_name|         player_name|medals|
+------------+--------------------+------+
| 2008 Summer|Michael Fred Phel...|     8|
| 2016 Summer|Michael Fred Phel...|     5|
| 2016 Summer|Kathleen Geneviev...|     4|
| 2016 Summer|Simone Arianne Biles|     4|
| 2012 Summer|Michael Fred Phel...|     4|
| 2012 Summer|Melissa Jeanette ...|     4|
| 2012 Summer|Dana Whitney Voll...|     3|
| 2016 Summer|         Danuta Kozk|     3|
| 2016 Summer|       Katinka Hossz|     3|
| 2008 Summer|Christopher Andre...|     3|
| 2016 Summer|         Ryan Murphy|     3|
| 2016 Summer| Jason Francis Kenny|     3|
| 2010 Winter|           Wang Meng|     3|
| 2014 Winter|           Viktor An|     3|
| 2008 Summer|             Zou Kai|     3|
| 2008 Summer|Stephanie Louise ...|     3|
| 2014 Winter|Darya Vladimirovn...|     3|
| 2016 Summer|  Usain St. Leo Bolt|     3|
| 2014 Winter|        Marit Bjrgen|     3|
| 2010 Winter|        Marit Bjrgen|     3|

1 Ответ

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

Используйте ROW_NUMBER() или RANK():

select olympic_name, player_name, medals
from (select olympic_name, player_name, count(*) as medals,
             rank() over (partition by olympic_name order by count(*) desc) as seqnum
      from olympics 
      where medal = 'Gold'
      group by olympic_name, player_name 
     ) op
where seqnum = 1;
...