2014-10-17 85 views
0

我在我的數據庫中的兩個表:
使用GROUP BY獲取結果

song => id, name, song_ref, views 
artist => id, name 

我想從歌曲表爲每一個觀看最多的歌曲獲取所有藝術家。
我試圖使用MAX(views)來獲取最大視圖值,但沒有成功獲取該相關歌曲的其他字段。

SELECT a.name, MAX(s.views) FROM song s inner join artist a 
ON s.artist_ref = a.idArtist GROUP BY a.name 

有什麼想法嗎?謝謝

+0

您是否考慮過將所需的列添加到SELECT子句中? – DaveCoast 2014-10-17 01:57:02

+0

是的,它會顯示一個與最大視圖無關的隨機結果 – Rawhi 2014-10-17 01:59:24

回答

2

試試這個:

SELECT * 
FROM 
    (SELECT a.id AS aid, 
      a.name AS artist, 
      s.id AS sid, 
      s.name AS most_viewed, 
      s.views 
    FROM artist a 
    INNER JOIN song s ON s.artist_ref=a.id 
    ORDER BY a.id, 
      s.views DESC) c 
GROUP BY c.aid; 
+0

完美,,非常感謝你 – Rawhi 2014-10-17 09:16:41

1

我的第一個回答是不正確的。這裏是一個可行的修訂版:

SELECT a.idArtist AS aid, a.name, s.id AS sid, s.views 
FROM artist a INNER JOIN song s ON a.idArtist = s.artist_ref 
INNER JOIN (SELECT MAX(views) AS views, artist_ref FROM song GROUP BY artist_ref) max_songs 
ON s.artist_ref = max_songs.artist_ref AND s.views = max_songs.views 
ORDER BY a.name 
+0

它可以工作,但沒有返回觀看次數最多的歌曲。 – Rawhi 2014-10-17 01:53:57

0

試試這個..

SELECT a.name, 
(SELECT s.views FROM song s WHERE s.name=a.name 
ORDER BY s.views DESC LIMIT 0,1) as `views` 
FROM artist a 
0

這是否小提琴返回正確的值(編輯小提琴鏈接名稱和包括工作SQL語句,該語句返回具有最多觀看歌曲的行的關聯列)。

Link to Fiddle

它演示與測試數據下面的SQL語句。

SELECT a.Name, a.songRef, Views, aName FROM artist b 
INNER JOIN song a on a.Name = b.aName 
    WHERE Views = 
     (SELECT MAX(Views) from Song as z 
     WHERE z.Name = b.aName) GROUP BY a.name, b.aName, a.songRef 
+0

這並沒有提供一個問題的答案。要批評或要求作者澄清,請在其帖子下方留言。 – mrt 2014-10-17 03:37:04

+0

@mrt您是否遵循指向小提琴的鏈接並確定它與底座基本相關,或者超鏈接文本是「帶MAX(視圖)的GROUP BY示例」,這很容易被解釋爲無價值的SQL語句。答案已被編輯。 – DaveCoast 2014-10-17 04:08:36

+0

當然,我做到了。無論如何,現在你編輯了你的答案,我的投訴不再有效。 ;) – mrt 2014-10-17 04:45:58