分组方式,在MySQL中使用
我对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
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行?还是随便挑一个?