我不理解以下内容(返回具有最新日期的文章的评论数量):
SELECT `id_comment`,COUNT(*) AS `number`, MAX(`date`) AS `newest`
FROM `page_comments`
WHERE TO_DAYS( NOW() )-TO_DAYS(`date`) < 90
GROUP BY `id_comment`
ORDER BY `count` DESC,`newest` DESC
我不明白为什么MAX函数不会返回所有page_comments表的MAX值?它只会自动获取给定组的最大值。使用MAX时,我希望它返回列的最高值。我不明白它如何与groupig一起工作。
答案 0 :(得分:1)
您已经非常正确地描述了这种行为:it automatically takes only the max for the given group
。
如果您进行分组,则会对结果集中的每一列(通常情况下)进行分组,而不是聚合(不使用COUNT
,SUM
,MIN
,{{1 }} ...)
这样,您可以获得所有非聚合列的不同值,而聚合列将产生仅考虑“当前”组的结果。
答案 1 :(得分:0)
这一切都归结为分析顺序:
所以你先得到from
条款
然后你通过where
剪切了相关的行(所以这里你的句子:*我不明白为什么MAX函数不会返回所有page_comments * - 失败的MAX值)
然后group
然后你选择它。
max
和聚合函数适用于已经过滤的数据!
答案 2 :(得分:0)
我只是在实地解释。
MAX() - 聚合函数(对数据组起作用)。
如果“”group by“”子句指定为 NOT ,则数据库将整个结果集视为组隐式地对数据(指定的列)进行分组。
如果指定,它只是将指定的组逻辑中的数据(列)分组。