gpt4 book ai didi

sql - 从表中获取分组数据作为列而不是行

转载 作者:行者123 更新时间:2023-12-04 18:27:14 28 4
gpt4 key购买 nike

我有一个具有以下架构的表:(日期、名称、状态)其中状态可以是“处理中”、“事件”和“已关闭”之一。示例条目是:

|------------+---------+------------|
| Date | Name | Status |
|------------+---------+------------|
| 2011-07-01 | Alice | Processing |
| 2011-07-01 | Alice | Active |
| 2011-07-02 | Alice | Closed |
| 2011-07-01 | Bob | Active |
| 2011-07-02 | Charlie | Processing |
|------------+---------+------------|

我正在使用以下查询来获取不同状态的帐户数量:

select date, status, count(distinct name)
from accounts
group by date, status

它给出了以下内容:

2011-07-01 Processing 1
2011-07-01 Active 2
2011-07-02 Active 1
2011-07-02 Closed 1

如何获取列中的数据?即,

2011-07-01 2 1 0
2011-07-02 1 0 1

第一列是日期,第二列是活跃状态的账户数,第三列是处理状态的账户数,最后一列是关闭状态的账户数?我唯一能想到的是为每个状态编写三个子查询并执行父查询来选择它们中的每一个。但它似乎不是很可扩展(例如,如果我必须添加一个新状态,我已经修改了父查询并添加了一个子查询)。

最佳答案

SELECT date
, SUM(CASE status WHEN 'Active' THEN cnt ELSE 0 END) AS a
, SUM(CASE status WHEN 'Processing' THEN cnt ELSE 0 END) AS p
, SUM(CASE status WHEN 'Closed' THEN cnt ELSE 0 END) AS c
FROM
( SELECT date, status, COUNT(DISTINCT name) AS cnt
FROM accounts
GROUP BY date, status
) grp
GROUP BY date
ORDER BY date

关于sql - 从表中获取分组数据作为列而不是行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6645871/

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