繁体   English   中英

SQL-MAX函数按问题分组的两列

[英]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;

请参阅使用MySQL LIMIT获得第n个最大值

正如其他人指出的那样,可以减少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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM