2014-06-29 50 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