我需要在一個項目中編寫查詢(MySQL的),以計數2個值在1個查詢
- 用戶總數幫助,
- 在該項目的用戶數已被「禁用」現在
,我可以單獨做到這一點,就像這樣:
SELECT COUNT(用戶)FROM T1 WHERE項目= 3
SELECT COUNT(用戶)FROM T1 WHERE項目= 3,狀態= 「已禁用」
但還有得是結合在一兩個查詢的簡單方法...
我需要在一個項目中編寫查詢(MySQL的),以計數2個值在1個查詢
,我可以單獨做到這一點,就像這樣:
SELECT COUNT(用戶)FROM T1 WHERE項目= 3
SELECT COUNT(用戶)FROM T1 WHERE項目= 3,狀態= 「已禁用」
但還有得是結合在一兩個查詢的簡單方法...
您可以使用UNION:
mysql> SELECT count(users) AS result FROM t1 WHERE project = 3 UNION
SELECT count(users) AS result FROM t1 WHERE project = 3 AND status = "disabled"
+--------+
| result |
+--------+
| 2 |
| 1 |
+--------+
其他的解決方案是子查詢:
mysql> SELECT (SELECT COUNT(ID) FROM t1 WHERE project = 3) AS total_users,
(SELECT COUNT(ID) FROM t1 WHERE project = 3 AND status = 'disabled') AS disabled_users;
+-------------+----------------+
| total_users | disabled_users |
+-------------+----------------+
| 2 | 0 |
+-------------+----------------+
無論如何,有關這些解決方案的事實是這兩個單獨的查詢將會很好。只有在非常大的系統上,這纔是重要的。當我們查看數據庫性能時,這兩個將比兩個單獨的查詢慢。我們希望這樣做的唯一原因是連接到數據庫的開銷。
那麼你可以做類似
SELECT status, count(users) FROM t1 **group by status** WHERE project = 3
得到一個狀態的結果集和在該狀態下有多少記錄的計數。爲總數添加所有計數,記住禁用計數的「禁用」計數。
SELECT status, count(users) FROM t1 group by status WHERE project = 3 AND status = "disabled"
Select
Project,
Count(Users),
Sum(Case When Status = 'Disabled' Then 1 Else 0 End)
From
T1
Group By Project
雖然我打字STU給了一個答案了。我基本上是相同的一個略有不同的語法:
select count(users), sum(if(status='disabled',1,0))
from t1
where project = 3 ;