mysql - 同一个选择中的多个 SQL 查询?

标签 mysql

我试图在一个查询中组合多个选择,以使用尽可能少的数据。 我有这个 sql 表(示例)

id category status
1   test1    A
2   test2    B
3   test1    A
4   test3    B
5   test1    C

首先我想选择相同类别的行数。

SELECT category, COUNT(category) FROM test GROUP BY category

然后我想统计每个类别中的状态。我会用这个查询来做到这一点。

SELECT status, COUNT(status) FROM test WHERE category = 'test1' GROUP BY STATUS

所以我想要一列总计,然后是每个类别的状态数。 我能以某种方式结合这些吗?这是可能的还是我只需要意识到我必须多次获取数据才能获得正确的结果?

最佳答案

您可以尝试GROUP BY 类别和状态并使用WITH ROLLUP获取聚合值:

SELECT category, status, count(*)
FROM test
GROUP BY category, status WITH ROLLUP

结果如下所示:

 category | status | count(*)
----------+--------+----------
 test1    | A      | 2
 test1    | C      | 1
 test1    | NULL   | 3
 test2    | B      | 1
 test2    | NULL   | 1
 test3    | B      | 1
 test3    | NULL   | 1
 NULL     | NULL   | 5     

如果您忽略包含 NULL 的行,其余的就是常规的 GROUP BY category, status。有 2 个条目具有 category = 'test1' AND status = 'A',一个条目具有 category = 'test1' AND status = 'C' 等等。

结果的第三行 (category = 'test1', status = NULL, count(*) = 3) 总结了具有 category = 'test1' 的行.它为所有具有 category = 'test1' 的行计算 count(*),无论它们在 status 列中的值是什么。以类似的方式计算了 category = 'test2'category = 'test3' 的摘要行。

最后一行是整个表格的摘要。 count(*) = 5 包括所有行,无论它们在 categorystatus 列中的值是多少。

关于mysql - 同一个选择中的多个 SQL 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35541996/

相关文章:

php - PHP 中的 @SET (SQL)

mysql - 通过计算更新 mysql 行

mysql - 谁知道这个sql注入(inject)?

c# - 如何知道哪些设备连接到我的网络(使用 C#)?

mysql - 如何在忽略列顺序的情况下计算SQL中的不同列

mysql - 在(选择.....)MySQL

mysql - 在 Rails 中动态保存分数排名

c++ - mysql c++ 连接器异常 : Access denied for user 'root' @'localhost' (using password: NO) && MySQL server has gone away

java - 我如何像在MySQL中那样在Spring Boot JPA中建立一对多关系?

带过滤器的 PHP 导航