MySQL: or null 統計某個字段不同值的個數


關於or、or null、count的介紹

or是短路邏輯或運算,當左邊為true時,則不再繼續運算右邊,當左邊為false時才繼續運算右邊;在mysql內部中true、false用1、0表示;exp or null先計算exp如果為true則直接返回true(1),否則繼續運算右邊,而右邊是null,遇到null直接返回null;count(exp | 字段)函數統計指定表達式或者字段中非null記錄的個數

1. MySQL 中 TRUE 為 1, False 為 0

mysql> SELECT TRUE, FALSE;
+------+-------+
| TRUE | FALSE |
+------+-------+
|    1 |     0 |
+------+-------+
1 row in set (0.00 sec)

 

2. 0 or 則會繼續運算右邊;遇到 NULL 直接返回 NULL

mysql> SELECT 1 OR NULL, 0 OR NULL, 1 AND NULL;
+-----------+-----------+------------+
| 1 OR NULL | 0 OR NULL | 1 AND NULL |
+-----------+-----------+------------+
|         1 |      NULL |       NULL |
+-----------+-----------+------------+
1 row in set (0.00 sec)

 

3. COUNT() 在統計列值時不統計 NULL,COUNT(NULL)的值為0; 但會統計 FALSE (NULL 和 FALSE 要區分),所以 COUNT(exp) 即使 exp 為 FALSE,COUNT也會進行統計。

mysql> SELECT COUNT(TRUE), COUNT(FALSE), COUNT(1), COUNT(0), COUNT(NULL);
+-------------+--------------+----------+----------+-------------+
| COUNT(TRUE) | COUNT(FALSE) | COUNT(1) | COUNT(0) | COUNT(NULL) |
+-------------+--------------+----------+----------+-------------+
|           1 |            1 |        1 |        1 |           0 |
+-------------+--------------+----------+----------+-------------+
1 row in set (0.00 sec)

 

4. 

mysql> SELECT COUNT(TRUE OR NULL), COUNT(1 OR NULL), COUNT(FALSE OR NULL), COUNT(0 OR NULL), COUNT(NULL OR NULL);
+---------------------+------------------+----------------------+------------------+---------------------+
| COUNT(TRUE OR NULL) | COUNT(1 OR NULL) | COUNT(FALSE OR NULL) | COUNT(0 OR NULL) | COUNT(NULL OR NULL) |
+---------------------+------------------+----------------------+------------------+---------------------+
|                   1 |                1 |                    0 |                0 |                   0 |
+---------------------+------------------+----------------------+------------------+---------------------+
1 row in set (0.00 sec)

 

示例: 查詢items表,統計color字段有多少種顏色,即統計某個字段不同值的個數。

SELECT COUNT(color = 'red' OR NULL) AS 'red', COUNT(color = 'blue' OR NULL) AS 'blue' FROM items;

SELECT SUM(IF(color = 'red', 1, 0)) AS 'red', SUM(IF(color = 'blue', 1, 0)) AS 'blue' FROM items;

SELECT SUM(color = 'red') AS 'red', SUM(color = 'blue') AS 'blue' FROM items;

 

mysql if 語句:

IF(expr1,expr2,expr3)  : 如果expr1的值為true,則返回expr2的值,如果expr1的值為false,則返回expr3的值。

MySQL SUM 語句:

1sum()函數里面的參數是列名的時候,是計算列名的值的相加,而不是有值項的總數。
(2sum(條件表達式),如果記錄滿足條件表達式就加1,統計滿足條件的行數

 

參考鏈接: https://blog.csdn.net/E_N_T_J/article/details/104108375


免責聲明!

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



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