2009-11-10 118 views
8

這感覺就像它應該有一個基本的解決方案,但我似乎並沒有得到它。SQL組與訂購

藉此查詢:

  SELECT Category FROM Article 
      GROUP BY Category 

我要有效做到這一點:

  SELECT Category, DatePublished FROM Article 
      GROUP BY Category 
      ORDER BY DatePublished DESC 

我真的不希望選擇DatePublished,但它似乎是有道理通過它來訂購。這雖然不起作用。

基本上我想根據最新的DatePublished文章排序類別。

回答

19
SELECT Category 
FROM Article 
GROUP BY 
     Category 
ORDER BY 
     MAX(DatePublished) DESC 

既然你做了GROUP BY,您需要通過非分組列運行一些聚合函數。

MAX將從每個類別中選擇上次發佈的文章的日期並相應地訂購類別。

6

在聚合( - >GROUP BY),則可以只在具有聚合功能(例如SUMMAXMIN)和GROUP BY -clause列出的字段組合選擇/使用的字段。

簡單的例子:

A | B 
-----+----- 
1 | 2 
1 | 3 

,如果你會寫SELECT A,B FROM table GROUP BY A,這將產生:

A | B 
-----+----- 
1 |{2,3} 

,但是這是不可能的(B有一排2個值!?!)。您必須對B的值進行操作,這些值也將它們組合在一起。所以兩種可能性:

:在GROUP BY -clause

SELECT A,B FROM table GROUP BY A,B 

添加B產生

A | B 
-----+----- 
1 | 2 
1 | 3 

:上B

SELECT A,MAX(B) FROM TABLE GROUP BY A,B 
使用聚合函數

給你

A | B 
-----+----- 
1 | 3 

相同的論點適用於ORDER BY條款。

大部分的時間,當你想寫出像第一個我發現了,可能1是解決方案,因爲你可能知道,AB屬於一起(共同樣本:UserIdUserName)的聲明,但RDBMS不知道它!