2011-08-05 99 views
1

我需要在一個項目中編寫查詢(MySQL的),以計數2個值在1個查詢

  1. 用戶總數幫助,
  2. 在該項目的用戶數已被「禁用」現在

,我可以單獨做到這一點,就像這樣:

SELECT COUNT(用戶)FROM T1 WHERE項目= 3

SELECT COUNT(用戶)FROM T1 WHERE項目= 3,狀態= 「已禁用」

但還有得是結合在一兩個查詢的簡單方法...

回答

2

您可以使用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 | 
+-------------+----------------+ 

無論如何,有關這些解決方案的事實是這兩個單獨的查詢將會很好。只有在非常大的系統上,這纔是重要的。當我們查看數據庫性能時,這兩個將比兩個單獨的查詢慢。我們希望這樣做的唯一原因是連接到數據庫的開銷。

-1

那麼你可以做類似

SELECT status, count(users) FROM t1 **group by status** WHERE project = 3 

得到一個狀態的結果集和在該狀態下有多少記錄的計數。爲總數添加所有計數,記住禁用計數的「禁用」計數。

-1
SELECT status, count(users) FROM t1 group by status WHERE project = 3 AND status = "disabled" 
1
Select 
    Project, 
    Count(Users), 
    Sum(Case When Status = 'Disabled' Then 1 Else 0 End) 
From 
    T1 
Group By Project 
0

雖然我打字STU給了一個答案了。我基本上是相同的一個略有不同的語法:

select count(users), sum(if(status='disabled',1,0)) 
    from t1 
    where project = 3 ;