我需要在一个项目中编写查询(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 ;