[英]SQL - Two columns group by issue with MAX function
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”的问题,我们遇到了麻烦,因为我们有两列(它只能用于一列,但不能用于两列)。 我们希望结果仅显示一位艺术家的录音时间第二长,但是代码显示同一位艺术家的每首歌曲的所有录音时间。 有什么建议么? 谢谢。
您无需仔细查看联接条件就可以进行多个联接。 可以将它们减少为一个连接,如下所示。
SELECT DISTINCT B.name, A.name, A.length
FROM recording A JOIN artist B
ON A.artist_credit=B.id
WHERE B.gender=1
AND A.length=(SELECT C.length FROM recording C
WHERE C.artist_credit=B.artist_credit
ORDER BY C.length LIMIT 1, 1)
ORDER BY B.name;
正如其他人指出的那样,可以减少join语句。 另外,AND语句中的运算符似乎也有问题。 为了获得第二个最大长度,它应该为<而不是<=(例如,此处: 找到第二个最大值的最简单的SQL查询是什么? )。
我建议尝试以下方法:
SELECT artist.name, recording.name, MAX(recording.length)
FROM recording
JOIN artist ON recording.artist_credit = artist.id
WHERE
artist.gender=1
AND
recording.length < (SELECT MAX(recording.length) FROM recording)
GROUP BY artist.name
ORDER BY artist.name
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.