分组方式,在MySQL中使用

分组方式,在MySQL中使用,mysql,group-by,Mysql,Group By,我对mysql查询有问题。 我需要得到最大值评级的全行。 例如,我有表食谱 4.1 | 1 | soup 4.2 | 3 | soup 4.9 | 4 | soup 4.8 | 5 | salads 4.3 | 6 | dishes9 SELECT MAX(rating) rat, id, class FROM recipes GROUP BY class 4.9 | 1 | soup 4.8 | 5 | salads 4.3 | 6 | dishes 4.8 | 5 | salads

我对mysql查询有问题。 我需要得到最大值评级的全行。 例如,我有表食谱

4.1  | 1 | soup
4.2 | 3 | soup
4.9 | 4 | soup
4.8 | 5 | salads
4.3 | 6 | dishes9

SELECT MAX(rating) rat, id, class FROM recipes GROUP BY class
4.9 | 1 | soup
4.8 | 5 | salads
4.3 | 6 | dishes
4.8 | 5 | salads
4.3 | 6 | dishes
评级| id |等级

4.1  | 1 | soup
4.2 | 3 | soup
4.9 | 4 | soup
4.8 | 5 | salads
4.3 | 6 | dishes9

SELECT MAX(rating) rat, id, class FROM recipes GROUP BY class
4.9 | 1 | soup
4.8 | 5 | salads
4.3 | 6 | dishes
4.8 | 5 | salads
4.3 | 6 | dishes
我得到的结果是:

rat|id|class

4.1  | 1 | soup
4.2 | 3 | soup
4.9 | 4 | soup
4.8 | 5 | salads
4.3 | 6 | dishes9

SELECT MAX(rating) rat, id, class FROM recipes GROUP BY class
4.9 | 1 | soup
4.8 | 5 | salads
4.3 | 6 | dishes
4.8 | 5 | salads
4.3 | 6 | dishes
所以在第一行(其中class='soup')中,我得到了truly max评级-4.9,但在这一行中,id的值是1,而不是4

当我使用
拥有

SELECT MAX(rating) rat, id, class FROM recipes GROUP BY class HAVING rating=rat
结果变成

rat|id|class

4.1  | 1 | soup
4.2 | 3 | soup
4.9 | 4 | soup
4.8 | 5 | salads
4.3 | 6 | dishes9

SELECT MAX(rating) rat, id, class FROM recipes GROUP BY class
4.9 | 1 | soup
4.8 | 5 | salads
4.3 | 6 | dishes
4.8 | 5 | salads
4.3 | 6 | dishes

有人能帮我解决这个问题吗?

一种方法是使用
IN()
子查询找到
MAX(rat)
行中相应的
id
s

SELECT * 
FROM recipes
WHERE id IN (
  SELECT id FROM recipes GROUP BY class HAVING rat = MAX(rat)
)
请尝试此查询-

SELECT r1.*  FROM recipes r1
  JOIN (SELECT MAX(rating) rat, class FROM recipes GROUP BY class) r2
    ON r1.class = r2.class AND r1.rating = r2.rat;

如果您有两个相同级别的id,且具有相同的最大评级,您希望得到什么。例如,在第一个列表中,如果添加第4.9 | 7 | soup行,是否同时返回第4行和第7行?还是随便挑一个?