Mysql SQL按多个字段分组
我有以下SQL语句:Mysql SQL按多个字段分组,mysql,sql,Mysql,Sql,我有以下SQL语句: 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_pricin
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
我有一个表节拍
,在节拍评级
中,每个节拍都有多行,这是一个单独的五星评级表。此SQL语句用于获得最高评级的beats
。我还按照r.beat\u id
进行分组,以确保每个beat
只返回一行
每个节拍都有一个b.producer
,我只想为每个producer
返回一个节拍。我已尝试通过
GROUP BY r.beat_id, b.producer
但这会返回完全相同的结果。如何根据
b.producer
字段分组或仅返回唯一行?您需要将查询移动到子查询中,然后根据producer将其分组:
SELECT *
FROM (yourquery)
GROUP BY producer
如果一个制作人有多个节拍,应该返回哪个节拍?@Barmar他们的最高评分节拍。这很完美,只要我在外部查询中按平均评分DESC、评分DESC count DESC LIMIT 50排序
,它就可以按我所希望的方式工作。谢谢你的帮助