GROUP BY& ORDER BY - 按特定字段排序

时间:2010-12-14 15:04:28

标签: mysql group-by sql-order-by

我需要编写一个查询,该查询返回该类中最受欢迎项目排序的唯一“类”列表。这是一个示例查询:

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

所有变化 - 这只会返回最新添加的而不是最受欢迎的。

我已阅读其他答案的lotslots

我确定有一个简单的答案,请帮忙!

4 个答案:

答案 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的情况下处理订单。