【发布时间】:2011-05-25 08:10:24
【问题描述】:
我需要编写一个查询,该查询返回按该类中最受欢迎的项目排序的唯一“类”列表。这是一个示例查询:
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
所有变体 - 这只是返回最新添加的而不是最流行的。
我确定有一个简单的答案,请帮忙!
【问题讨论】:
-
ORDER BY MAX(items.popularity) DESC对我来说甚至没有意义...... ORDER BY 应该按列排序,而 MAX 从该列返回单个值。不应该只是ORDER BY popularity DESC来获取顶部有最大popularity的项目吗? -
当你 GROUP BY 时,它似乎选择了最古老的记录来领导该组,而忽略了所有的人气。使用 MAX 函数可以解决很多类似问题。
-
GROUP BY 通常用于进行分析,例如 MAX、MIN、AVG、COUNT 等...“最旧”记录无关紧要,因为通常,GROUP BY 用于汇总/聚合无数条记录变成一两条记录。我承认我什至不确定您所说的那句话是什么意思,尽管听起来您可能对 ORDER BY 和 GROUP BY 感到困惑......
-
...我还有一个问题:为什么
classes包含在此查询中?我看不出将items加入classes的原因,因为您没有从classes中选择任何东西,而且连接条件似乎微不足道,除非items中可能有一个class_idi>不存在在classes... -
这是一个很好的观点,完整的查询确实需要类。但是我应该从简化示例中删除它。
标签: mysql group-by sql-order-by