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