2015-11-03 2 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

Смежные вопросы