如何正确选择此分组数据?

flseospp  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(315)

首先,对不起,我的题目太笼统了,我不知道该怎么说。
我使用的是一个遗留数据库,无法对模式进行更改,因此我不得不使用现有的数据库。
表设置(列):
id(正常的int id)
uniqueid(保存每个位置的uniqueid的列)
status(一个varchar列,可以包含三种状态之一:“completed”、“failed”、“attention”)
count(一个int列,表示每个状态中有多少用户
示例数据:

UniqueId    Status  Count
679FCE83-B245-E511-A42C-90B11C2CD708    completed   64
679FCE83-B245-E511-A42C-90B11C2CD708    Attention   1
679FCE83-B245-E511-A42C-90B11C2CD708    failed  101
4500990D-F516-E411-BB09-90B11C2CD708    completed   100
4500990D-F516-E411-BB09-90B11C2CD708    Attention   17
4500990D-F516-E411-BB09-90B11C2CD708    failed  516
557857BD-6B46-E511-A42C-90B11C2CD708    completed   67
557857BD-6B46-E511-A42C-90B11C2CD708    Attention   4
557857BD-6B46-E511-A42C-90B11C2CD708    failed  103

我要做的是选择所有记录,按uniqueid分组,每个状态都有一个单独的列,包含它们各自的计数。结果是这样的。。。

UniqueId, count(completed), count(failed), count(Attention)
679FCE83-B245-E511-A42C-90B11C2CD708     64     101     1
4500990D-F516-E411-BB09-90B11C2CD708     100     516     17
557857BD-6B46-E511-A42C-90B11C2CD708     67     103     4

我肯定我错过了一些基本的东西,但我似乎找不到的话,谷歌我的出路之一。
有人能把我推向正确的方向吗?

iqih9akk

iqih9akk1#

可以使用条件聚合:

select uniqueid, 
       sum(case when status = 'Completed' then count else 0 end) as completed,
       sum(case when status = 'Failed' then count else 0 end) as failed, 
       sum(case when status = 'Attention' then count else 0 end) as attention
from t
group by uniqueid;

相关问题