聚合函数如何与group by一起使用

时间:2013-12-12 13:24:09

标签: sql group-by

我不理解以下内容(返回具有最新日期的文章的评论数量):

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一起工作。

3 个答案:

答案 0 :(得分:1)

您已经非常正确地描述了这种行为:it automatically takes only the max for the given group

如果您进行分组,则会对结果集中的每一列(通常情况下)进行分组,而不是聚合(不使用COUNTSUMMIN,{{1 }} ...)

这样,您可以获得所有非聚合列的不同值,而聚合列将产生仅考虑“当前”组的结果。

答案 1 :(得分:0)

这一切都归结为分析顺序:

  1. FROM
  2. ON
  3. OUTER
  4. WHERE
  5. GROUP BY
  6. CUBE | ROLLUP
  7. HAVING
  8. 选择
  9. DISTINCT 10订购
  10. TOP
  11. 所以你先得到from条款

    然后你通过where剪切了相关的行(所以这里你的句子:*我不明白为什么MAX函数不会返回所有page_comments * - 失败的MAX值)

    然后group

    然后你选择它。

    max和聚合函数适用于已经过滤的数据!

答案 2 :(得分:0)

我只是在实地解释。

MAX() - 聚合函数(对数据组起作用)。

如果“”group by“”子句指定为 NOT ,则数据库将整个结果集视为组隐式地对数据(指定的列)进行分组。

如果指定,它只是将指定的组逻辑中的数据(列)分组。