【发布时间】:2018-11-08 01:13:35
【问题描述】:
SELECT artist.name, recording.name, MAX(recording.length)
FROM recording
INNER JOIN (artist_credit
INNER JOIN (artist_credit_name
INNER JOIN artist
ON artist_credit_name.artist_credit=artist.id)
ON artist_credit_name.artist_credit=artist_credit.id)
ON recording.artist_credit=artist_credit.id
WHERE artist.gender=1
AND recording.length <= (SELECT MAX(recording.length) FROM recording)
GROUP BY artist.name, recording.name
ORDER BY artist.name
我们在学校使用 MusicBrainz 数据库,但我们在使用“GROUP BY”时遇到了问题,因为我们有两列(它适用于一列,但不是两列)。我们希望结果只显示一位录制时间第二长的艺术家,但代码显示同一艺术家每首歌曲的所有录制时间。 有什么建议?谢谢。
【问题讨论】:
-
为什么有嵌套连接?
-
如果是 TSQL,我会使用窗口函数来为每个艺术家找到第二长的录音。网络搜索可能会揭示如何使用 Postgre 完成同样的任务。
-
@HaleemurAli 因为我们需要的数据来自不同的表。
-
我看到了连接的必要性,但我认为不需要像您所做的那样嵌套它们。如果删除连接子句中的所有括号,则查询是等效的
-
@JoeC 我们已经在网上搜索了几个小时,只找到了带有单列的 group by。具有两列的唯一解决方案是使用 COUNT 函数,但我们不能使用它。
标签: sql database postgresql max aggregate-functions