sqlite 很难弄清楚如何列出与特定艺术家关联的“专辑”数量

628mspwn  于 2022-11-24  发布在  SQLite
关注(0)|答案(2)|浏览(147)

所以我做了一个SQL练习,要求我列出制作了6张以上专辑的艺术家的名字。
我已经成功地列出了6+专辑的艺术家的名字和每个艺术家出现在表中的第一张专辑,但是我不知道如何列出专辑的数量。
我正在处理两个表。“艺术家”和“专辑”。

  • “艺术家”包含“艺术家ID”和“名称”
  • “专辑”包含“艺术家ID”和“专辑”

这是我的sql代码,在下面的链接中可以找到当前输出与预期输出的比较。如果有人能给我指出正确的方向,我将非常感激。注意,我只应该使用COUNT一次。

SELECT artists.name, albums.albumid
from albums join artists on albums.ArtistId = artists.ArtistId
GROUP BY artists.artistid
HAVING COUNT(albums.albumid) > 6

https://i.stack.imgur.com/EYmyZ.png
编辑:我已经发现这会给出正确的输出,但是我只应该使用COUNT函数一次,有没有其他选择?

SELECT artists.name, COUNT (albums.albumid) AS 'Total Albums Released'
from albums join artists on albums.ArtistId = artists.ArtistId
GROUP BY artists.artistid
HAVING COUNT(albums.albumid) >= 6
ORDER BY COUNT('Total Albums Released') DESC
sxissh06

sxissh061#

聚集值的筛选应该在HAVING子句中完成,您可以在SELECT列表中使用一次COUNT(*),在其他任何地方使用其别名:

SELECT ar.name, 
       COUNT(*) AS "Total Albums Released" 
FROM artists AS ar JOIN albums AS al
ON al.ArtistId = ar.ArtistId
GROUP BY ar.ArtistId
HAVING "Total Albums Released" >= 6
ORDER BY "Total Albums Released" DESC;
p4tfgftt

p4tfgftt2#

HAVING子句只作为一个过滤器,它本身并不返回一个列。这仍然在select语句中。
编辑:Where子句可让您将筛选套用至整个表格,而非仅套用至选取的群组,让您可以使用汇总函数

SELECT artists.name, COUNT (albums.albumid) AS 'Total Albums Released'
from albums join artists on albums.ArtistId = artists.ArtistId
WHERE 'Total Albums Released' >= 6
GROUP BY artists.artistid
ORDER BY COUNT('Total Albums Released') DESC

相关问题