db中有歌手和歌曲表,我们必须通过不使用聚合函数和按关键字分组来找到拥有最多歌曲号码的人。
土耳其语表
表被翻译成
song(sarkino, name, tour, duration, composerno, author no)
singer(singer, name, type, birthDate, birthPlace)
album(albumno, name, year, price, singer, stock quantity)
Song in the album(albumno, song, order)
composer(composcino, name, tour)
author(author, name)
问题原文:
在这里输入图片描述
问题翻译为:
求写歌词最多的作者编号,如我们在课堂上(在演示的例子中)没有使用聚合函数或分组by。
正如Ergest所提到的,非常标准的方法是使用GROUP BY
和COUNT
。但是,今天你的老师喜欢挑战。
GarethD的替代解决方案(绝对符合要求)
我想在我的回答中重述一下GarethD的评论,这都是他的功劳。
如果讲师认为COUNT(*)是一个聚合函数,即使在窗口函数中使用,这将不是一个可行的解决方案。如果唯一的要求是获得拥有最多歌曲的歌手,那么另一种选择是使用ROW_NUMBER(),这几乎肯定不是任何人定义的聚合函数
SELECT s.name,
ROW_NUMBER() OVER (PARTITION BY s.id ORDER BY Songs.id) AS number_of_songs
FROM singers AS s
JOIN Songs
ON Songs.singer_id = s.id
ORDER BY number_of_songs DESC
LIMIT 1
name | number_of_songs | 林肯公园 | 5 |
---|