天天看點

oracle sum count 的差別

  在開發時,我們經常會遇到以“累計(count)”或是“累加(sum)”為條件的查詢。比如aaa表: ID,NAME,SHU 1,a,3 2,a,4 3,b,5 4,b,7 5,a, 6,a,20         例1:查詢出現過2次的name。   往往初學者會錯誤地認為在where 語句裡直接使用count()算法,很顯然這個想法是錯誤的,count()方法并不能被用在where子句中,為了解決問題,我們可以在group by子句後面使用HAVING來做條件限制。   錯誤做法:select * from aaa where count(name)>=2 group by name;   正确做法:select * from aaa group by name HAVING count(name)>=2 ;   解釋說明:HAVING 與 WHERE 類似,可用來決定選擇哪些記錄。HAVING 子句在SELECT語句中指定,顯示哪些已用 GROUP BY 子句分組的記錄。在GROUP BY組合了記錄後, HAVING會顯示 GROUP BY 子句分組的任何符合 HAVING 子句的記錄。     例2:查詢單一使用者的SHU總和大于10的使用者。   有前面的經驗,把sum()方法寫在HAVING子句中。   正确做法:select * from aaa group by name HAVING sum(SHU)>10 ;     注意:一個HAVING子句最多隻能包含40個表達式,HAVING子句的表達式之間可以用AND和OR分割。         例3:sum 與count 的差別         select name, count(shu), sum(shu)             from aaa          group by name          結果為:a       3     27               b       2     12        可見:oracle 資料庫中對空值的事不同的,count 函數認為沒有此項,而sum函數不計算。        結論: 求和用累加 sum ,求行的個數用累計 count