我有一个这样的表:
// question_and_answers
+----+---------+---------------+--------+------+
| id | title | body | amount | type |
+----+---------+---------------+--------+------+
| 1 | t1 | b1 | NULL | 0 |
| 2 | t2 | b2 | NULL | 1 |
| 3 | t3 | b3 | NULL | 1 |
| 4 | t4 | b4 | 100 | 0 |
| 5 | t5 | b5 | NULL | 0 |
| 6 | t6 | b6 | NULL | 1 |
| 7 | t7 | b7 | 50 | 0 |
+----+---------+---------------+--------+------+
我有两个疑问:
1:问题数量:
SELECT count(1) FROM question_and_answers WHERE type = 0
2:付费问题数量:
SELECT count(1) FROM question_and_answers WHERE type = 0 AND amount IS NOT NULL
我可以合并这两个查询吗?我的意思是我可以编写一个查询来代替它们吗?
最佳答案
您可以使用条件聚合:
SELECT sum(type = 0 AND amount IS NOT NULL),
count(*)
FROM question_and_answers
WHERE type = 0
在 MySQL 中,比较的结果是 0
或 1
。您可以像上面的查询一样对这些结果进行总结。
要使其适用于其他数据库引擎,您可以使用以下通用 ANSI SQL 方法:
SELECT sum(case when type = 0 AND amount IS NOT NULL then 1 else 0 end),
count(*)
FROM question_and_answers
WHERE type = 0
或使用count()
:
SELECT count(case when type = 0 AND amount IS NOT NULL then 1 else null end),
count(*)
FROM question_and_answers
WHERE type = 0
关于mysql - 我可以在同一个查询中计算两个不同的事物吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44088005/