2013-12-12 92 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和聚合函數適用於已經過濾的數據!