20120317

T-SQL - 以月份或是日期進行GROUP BY

說明

GROUP BY可以說是SQL中最重要的語法了。因為我們搜集資料的目的,就是從大量的資料中找出有用的資訊,其中又以各統計函數 (如SUM(), AVG(), MAX(), MIN(), COUNT())等等所代表的涵意最為重要。但是要利用到這些功能,就需要GROUP BY這個語法來將資料群組化,以便進行群組化。

 

尤其是常常使用到的功能就是要將資料依「月份」或是「日期」來進行群組化,這時候就需要一些小技巧(語法)來達成我們想要的結果了。

 

 

解決方法

1. 以日期進行GROUP BY

語法:

  1: SELECT
  2: 
  3: CONVERT(CHAR(8), RecordTime, 112) AS Day,
  4: 
  5: SUM(Money) AS DailyAmount
  6: 
  7: FROM Sales
  8: 
  9: WHERE (KEY = 3)
 10: 
 11: GROUP BY CONVERT(CHAR(8), RecordTime, 112)
 12: 
 13: ORDER BY Day DESC
 14: 


說明:

這一句,我是利用「CONVERT」這個函式,將原有的日期改為一個型別為char(8)的字串,然後針對此字串進行GROUP BY,以得到我們想要的結果。其中的112代表的是ISO制定的標準日期格式,也就是yyyymmdd。詳見參考中的「CAST 和 CONVERT (Transact-SQL)」。

 

 

2. 以月份進行GROUP BY

語法:

  1: SELECT
  2: 
  3: CONVERT(CHAR(6), RecordTime, 112) AS Day,
  4: 
  5: SUM(Money) AS DailyAmount
  6: 
  7: FROM Sales
  8: 
  9: WHERE (KEY = 3)
 10: 
 11: GROUP BY CONVERT(CHAR(6), RecordTime, 112)
 12: 
 13: ORDER BY Day DESC
 14: 

說明:

這一句,我是利用「CONVERT」這個函式,將原有的日期改為一個型別為char(6)的字串,然後針對此字串進行GROUP BY,以得到我們想要的結果。其中的112代表的是ISO制定的標準日期格式,也就是yyyymmdd。詳見參考中的「CAST 和 CONVERT (Transact-SQL)」。

 

各位看倌可能注意到了,這二句的差別只在轉換出來的char長度,因為格式是yyyymmdd的關係,若是長度為8則成為一個完整的日期;若長度為6則只是月份,這就是控制GROUP BY顯示資料的語法。

 

 

參考

CAST 和 CONVERT (Transact-SQL)

沒有留言: