2013-12-12 126 views
1

与组聚合功能的工作,我不明白以下(评论回报号码与最新的那些日期的文章):如何通过

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

+2

我不明白这个问题。如果你想拥有整列的最大值,那么不要使用group by。就那么简单。通过组获得当然每个组的最大值。顺便说一句,选择'id_clanek'而不是'id_comment'会更有意义,因为你正在用'id_clanek'进行分组。 – fancyPants

+0

对不起,是一个错字。 – KhDonen

回答

0

我只是向地面解释它。

MAX() - 聚合函数(适用于数据组)。

如果“”组由“”子句指定NOT,数据库隐式组的数据(指定的列)考虑整个结果设置为组。

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

+0

如果group by被指定,则它与eaah group分别工作?由于我无法读取任何地方的任何信息 – KhDonen

+0

是的。MAX()在每个可能的组中都做过识别。 –

+0

按分组排列。生成列的唯一键,对于evry键(group),将生成MAX()结果。 –

1

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

如果你组,你对结果集中的每一列做(往常一样),未汇总(而不是使用COUNTSUMMINMAX ...)

这样,你得到不同所有非聚合列和合计列的值将产生仅考虑“当前”组的结果。

+0

谢谢,是的,我知道它是这样工作的,我只是不明白为什么:)我意外发现:]我不明白“当前组”。 – KhDonen

+0

@KhDonen以及为什么很容易,你将不得不编写单独的查询,否则和'联合'他们得到相同的结果,如果你想'总'MAX'或类似的东西,你根本没有组 – DrCopyPaste

+0

不,我的意思是我没有看到这些分开的群体被单独采集的背后逻辑,因此每个人都会计算最大值。 – KhDonen

0

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

  1. FROM
  2. ON
  3. OUTER
  4. WHERE
  5. GROUP BY
  6. CUBE | ROLLUP
  7. HAVING
  8. 选择
  9. DISTINCT 10 ORDER BY
  10. TOP

,所以你首先要有from条款

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

然后group it

然后你选择它。

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