最近更新: 2006-02-06

SQL~~GROUP BY, COUNT and HAVING

欲得知資源被使用次數大於 1 的報表。資源使用記錄儲存在資料表 rsu 中,其中 uno 欄位為資源代碼,資源每被使用一次 ,就會在 rsu 表中增加一筆使用記錄。故需使用 COUNT() 做計數動作,並指定搜尋條件為計數值大於 1 者。但在合計操作中 (It, '合計操作', means a query with aggregate method.) ,不能使用 WHERE 為條件表示,而應使用 HAVING 。

select rsu.uno, count(rsu.uno) as counts from rsu
where rsu.record_date = '2006-02-04'
group by rsu.uno having count(rsu.uno) > 1

最常見的 aggregate method 就是 SUM() 和 COUNT() 。由於 aggregate method 往往要搭配 GROUP BY 使用,因此對 GROUP BY 和 HAVING 的用法,產生了一個常見的誤解,即以為 HAVING 只能用在 GROUP BY 之後。然而, HAVING 其實是用於對 aggregate method 之結果作條件篩選,由於 aggregate method 可以不配合 GROUP BY 使用,所以 HAVING 也可以出現在沒有 GROUP BY 的查詢中。

相關文章
樂多舊網址: http://blog.roodo.com/rocksaying/archives/1092066.html