關於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 語句:
(1)sum()函數里面的參數是列名的時候,是計算列名的值的相加,而不是有值項的總數。 (2)sum(條件表達式),如果記錄滿足條件表達式就加1,統計滿足條件的行數
參考鏈接: https://blog.csdn.net/E_N_T_J/article/details/104108375