我试图在一个查询中组合多个选择,以使用尽可能少的数据。 我有这个 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
包括所有行,无论它们在 category
和 status
列中的值是多少。
关于mysql - 同一个选择中的多个 SQL 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35541996/