2015-11-03 114 views
0
Album 
Title          Artist    Year Type  Rating 
My World         Justin Bieber   2009 STUDIO   4 
My Worlds: The Collection     Justin Bieber   2010 COMPILATION  4 
21          Adele     2011 STUDIO   5 
Adele Live at the Royal Albert Hall  Adele     2011 LIVE    4 
Get to Heaven        Everything Everything 2015 STUDIO   5 
One of the boys       Katy Perry   2008 STUDIO   3 
Overexposed        Maroon 5    2012 STUDIO   5 
Live From Le Cabaret: In Montreal. Quebec Maroon 5    2008 LIVE    4 
Pure Heroine        Lorde     2013 STUDIO   4 

因此,以上是專輯,我怎樣才能得到每個藝術家自己的最高評級專輯?如何獲得每位藝術家的最高評分專輯?

在此先感謝。

+0

在您的問題中內聯圖像而不是提供在另一個選項卡中打開的鏈接是一種很好的做法。這使您的問題更易於閱讀和理解。 – dant3

+0

最好的做法是完全取消鏈接圖像 – Strawberry

回答

2

這裏有一個選項使用max總連結到子查詢:

select a.title, a.artist 
from album a join (
    select artist, max(rating) maxrating 
    from almum 
    group by artist) t on a.artist = t.artist and a.rating = t.maxrating 

這可以返回每個藝術家多冠軍,如果他們共享的最高評級。


,甚至更容易與outer join

select a.* 
from album a     
    left join album a2    
     on a.artist = a2.artist and a.rating < a2.rating 
where a2.rating is null 
+0

我喜歡第二個答案。它起初很混亂,但非常優雅......並且不需要子查詢! – soulfreshner

+1

@soulfreshner第一種解決方案比第二種解決方案快幾個數量級。 – Strawberry

+0

@Strawberry - 我認爲他們在'mysql'中相當。我通常使用第一個選項(實際上是因爲可讀性) - 它的性能是否更好? – sgeddes

-1
SELECT* 
FROM(SELECT* FROM`Album` ORDER BY `Artist`, `Rating` DESC) x 
GROUP BY `Artist` 

更多信息,請參見this question,這是相當類似的。基本上,對它進行排序,以便讓藝術家重新整理表格,並在每個表格的頂部對其進行最高評分,然後對其進行分組,以便爲​​每個表格拉出第一條記錄。

+0

我從來不喜歡這個解決方案 - 只是覺得不正確......我認爲它實際上可以返回任意值,但我可能會誤解。 – sgeddes

+1

這不能保證返回值...你是按藝術家分組,不保證你會得到第一個記錄。雖然這似乎是與MySQL的情況。 – soulfreshner