我需要编写一个查询,该查询返回该类中最受欢迎项目排序的唯一“类”列表。这是一个示例查询:
SELECT items.title, items.popularity
FROM items, classes
WHERE class_id = classes.id
GROUP BY class_id
ORDER BY MAX(items.popularity) DESC
此查询返回正确的类,但它返回的项是第一个出现在表中而不是最常用的项。
同样我尝试过:
SELECT MAX(items.title), items.popularity
FROM items, classes
WHERE class_id = classes.id
GROUP BY class_id
ORDER BY MAX(items.popularity) DESC
所有变化 - 这只会返回最新添加的而不是最受欢迎的。
我确定有一个简单的答案,请帮忙!
答案 0 :(得分:2)
您没有从班级中选择任何内容,因此不需要该表:
select i.*
from (
SELECT class_id, max(popularity) as MaxPopularity
FROM items
GROUP BY class_id
) ip
inner join items i on ip.class_id = i.class_id
and ip.MaxPopularity = i.popularity
注意:如果一个类中有多个项目具有相同的受欢迎程度,则可能会出现重复项。
答案 1 :(得分:0)
我的猜测是你应该按降序排序MAX(流行度),尝试在查询结束时添加DESC。
答案 2 :(得分:0)
我没试过,但我认为它应该有用......
SELECT MAX(items.title), items.popularity
FROM items, classes
WHERE class_id = classes.id
GROUP BY class_id
ORDER BY items.popularity DESC
答案 3 :(得分:0)
SELECT items.title, items.popularity
FROM items, classes
WHERE class_id = classes.id
ORDER BY items.popularity DESC
您不应该需要该组,因为您已经在where语句中选择了特定的类。此外,按顺序的DESC应该在不需要MAX的情况下处理订单。