【发布时间】:2021-07-16 04:40:59
【问题描述】:
我有这些表:
歌曲
id,album_id, name, audio_url
专辑
id、标题、描述、account_id
帐户
id、first_name、last_name、display_picture_url
Listening_Session
id、song_id、account_id
我希望能够列出如下流行歌曲:
歌曲ID |歌曲名称 |名字 |姓氏 |显示图片网址 |会话计数
基本上,我想列出歌曲及其作者姓名和显示图片,以及启动了多少次收听歌曲的会话(无论作者或其他用户收听),按会话计数降序排列。
我试过了:
SELECT s.*, pc.account_id, first_name, last_name, display_picture_url
FROM song as s
LEFT JOIN album a ON s.id = s.album_id
LEFT JOIN accounts acc ON acc.id = s.account_id
WHERE s.is_deleted = false AND s.id IN (
SELECT s.id FROM song s
LEFT JOIN listening_sessions ls ON ls.song_id = s.id
WHERE s.is_deleted = false GROUP BY s.id
ORDER BY count(s.id) DESC
)
但我认为我会丢失 ORDER BY 计数,因为它在子查询中并且也无法获得会话计数
我也试过了:
SELECT s.*, COUNT(ls.id)
FROM song as s
LEFT JOIN listening_sessions ls ON ls.song_id = s.id
LEFT JOIN album a ON a.id = s.album_id
LEFT JOIN accounts acc ON acc.id = pc.account_id
GROUP BY s.id
ORDER BY count(ls.id) DESC
这会起作用,但如果我尝试包含 first_name、last_name 和 display_picture_url,它会说:
错误:列“acc.first_name”必须出现在 GROUP BY 子句中或用于聚合函数中
编辑:我在我的表中实现了主键,但目前没有实现外键以便于使用,idk 如果这会有所不同
【问题讨论】: