Mysql中 使用有條件的sum/count


其他知識點補充:

  • 隨機數函數RAND():生成0到1的小數
  • 小數取整:四舍五入:ROUND()、向上取整:CEILING()、向下取整:FLOOR()
  • if()函數:SELECT if(sex=0,'女','男') AS sex FROM student; 這個if()函數就相當於java里面的三目運算符。if(expr1,expr2,expr3),如果expr1的值為true,則返回expr2的值,如果expr1的值為false,則返回expr3的值。但是如果在sum中使用了if()函數,就是對結果值進行累加,例如SUM(IF(`hosts`.state = 0, 1, 0)),當hosts.state的值為0時,和加1,不為0時,和加0。
  • 在count()中使用條件,COUNT(type=2 OR NULL),count(*)只統計函數,count(列)統計記錄中該列不為null的數量。
0 OR null null
1 OR null 1
null OR null null
0 AND null 0
1 AND null null
null AND null null

不必要的情況盡量不用,性能低; 性能參考:http://www.voidcn.com/article/p-ypikcnit-om.html

在SQL的統計函數中使用條件, 其用途不在於代替count函數配合where函數進行聚合計算,而是在復雜查詢中在sum/count中加入條件,一次性求出不同條件下的聚合結果。但性能低下,不推薦使用。

表的原始數據

 

 

SELECT SUM(type=3) FROM test_count_sum;   -- 3, 查詢type=3的記錄數
SELECT SUM(IF(type=2,1,0)) AS sex FROM test_count_sum;   -- 2, 查詢type=2的記錄數,true就+1,false就+0

SELECT COUNT(type=3) FROM test_count_sum; -- 6 表達式無效
SELECT COUNT(IF(type=2,1,0)) AS sex FROM test_count_sum;  -- 6 表達式無效

SELECT COUNT(type=2 OR NULL) FROM test_count_sum;   --2, 使用count加條件,性能低下,盡量不用

有一些高端的語法只適用於拓展技術點,實際比不上最常用的語法!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM