2014-06-29 54 views
0

我有以下SQL語句:SQL GROUP BY多個領域

SELECT COUNT(r.id) as ratings_count, AVG(r.rating) as average_rating, b.id, b.bpm, b.producer, b.name, 
    (SELECT p.price FROM beats_pricing as p WHERE p.license = 1 AND p.beat_id = b.id) as price_1, 
    (SELECT p.price FROM beats_pricing as p WHERE p.license = 2 AND p.beat_id = b.id) as price_2 
    FROM beat_ratings AS r 
    INNER JOIN beats AS b 
    ON b.id = r.beat_id 
    WHERE b.active = 1 
    GROUP BY r.beat_id 
    HAVING price_1 > 0 
    ORDER BY average_rating DESC, ratings_count DESC 
    LIMIT 50 

我有beats一個表,其中有多個排在beat_ratings每個節拍這是個人5個星級評分表。此SQL語句用於獲得評分最高的beats。我還將r.beat_id分組以確保每個beat只返回一行。

每個節拍有一個b.producer,我只想爲每個producer返回一個beat。我試着將它添加到GROUP BY

GROUP BY r.beat_id, b.producer 

但這返回同樣的結果。如何根據b.producer字段分組或僅返回唯一行?

+0

如果生產者有多個節拍,其中一個應該返回? – Barmar

+0

@Barmar最受好評的節拍。 – Wasim

回答

2

您需要查詢進入一個子查詢,然後組由製片人:

SELECT * 
FROM (yourquery) 
GROUP BY producer 
+0

這是完美的,只要我在外部查詢中放置'HAVING price_1> 0 ORDER BY average_rating DESC,ratings_count DESC LIMIT 50',那麼它的工作原理就是我想要的。謝謝您的幫助 – Wasim