Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL按多个字段分组_Mysql_Sql - Fatal编程技术网

Mysql 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

我有以下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_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排序
,它就可以按我所希望的方式工作。谢谢你的帮助