簡體   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