gpt4 book ai didi

sql - 使用 GROUP BY 汇总统计数据的 Oracle SQL 查询

转载 作者:行者123 更新时间:2023-12-02 06:45:36 25 4
gpt4 key购买 nike

我有一个 Oracle 表,其中的数据如下所示:

ID   BATCH   STATUS
1 1 0
2 1 0
3 1 1
4 2 0

ID为主键,每一个“批处理”会有多行,每行在STATUS列中会有一个状态码。还有很多其他专栏,但这些是重要的。

我需要编写一个查询来汇总每个批处理状态代码; STATUS 列中可以包含三个可能的值,0、1 和 2,我希望输出看起来像这样:

BATCH  STATUS0  STATUS1  STATUS2
1 2 1 0
2 1 0 0

这些数字就是计数;对于第 1 批,有

  • 2 条 STATUS 设置为 0 的记录
  • 1 条记录,其中 STATUS 设置为 1,并且
  • 没有STATUS 设置为 0 的记录。

对于第2批,有

  • 1 条记录,其中 STATUS 设置为 0,并且
  • 没有STATUS 设置为 1 或 2 的记录。

有没有一种方法可以在一个查询中执行此操作,而不必为每个状态代码重写查询?即我可以轻松地编写这样的查询,并运行它三次:

SELECT batch, COUNT(status)
FROM table
WHERE status = 0
GROUP BY batch

我可以运行它,然后在 status = 1 的地方再次运行它,然后在 status = 2 的地方再次运行它,但我希望在一个查询中完成。

如果它有所不同,除了 STATUS 列之外,还有另一个列,我可能想以相同的方式进行总结——这是我不这样做的另一个原因想要在 SELECT 语句之后执行 SELECT 语句并合并所有结果。

最佳答案

select batch 
, count(case when status=1 then 1 end) status1
, count(case when status=2 then 1 end) status2
, count(case when status=3 then 1 end) status3
from table
group by batch;

这通常称为“枢轴”查询,我写了一篇关于如何动态生成这些查询的文章 on my blog .

使用 DECODE 的版本(特定于 Oracle 但不那么冗长):

select batch 
, count(decode(status,1,1)) status1
, count(decode(status,2,1)) status2
, count(decode(status,3,1)) status3
from table
group by batch;

关于sql - 使用 GROUP BY 汇总统计数据的 Oracle SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1029032/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com