mysql - 我可以在同一个查询中计算两个不同的事物吗?

标签 mysql sql count

我有一个这样的表:

// 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 中,比较的结果是 01。您可以像上面的查询一样对这些结果进行总结。

要使其适用于其他数据库引擎,您可以使用以下通用 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/

相关文章:

php - PDO 中的 LIKE 查询不起作用

ORDER BY 的 MySQL 索引,日期范围在 WHERE

mysql - 在多个表上选择

python - 计算 flask 模板中的行数

mysql - 我如何计算 ON DUPLICATE KEY UPDATE MySQL -php 中更新行的总数

mysql - 使用 ActiveRecord 急切加载数据库表

mysql - 如何优化这个包含 5 个子查询的查询?

mysql - 在同一个表的表上插入行

c++ - arduino count++ 有限制吗?如何解决?

mysql - 按查询优化组