2011-08-05 157 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 ;