因此,我正在编写一个查询,从表中获取前10个计数并显示总数。我想要的是把它分成“失败”和“成功”。
所以我的表显示
Total Groups
58 Group 5
32 Group 77
32 Group 78
31 Group 99
29 Group 89
29 Group 34
26 Group 57
15 Group 54
12 Group 25
11 Group 15
所以如果你在第五组看到总共有58条记录。但在这58人中,有53人“成功”,5人“失败”
我不能搜索失败的帐户,并做一个前10名,因为这样的计数将较低,前10名将是不同的。
SELECT top 10 Count(distinct FileID) AS Total, Groups
FROM Table
where Date = '2020-05-28'
group by Group
order by Total DESC
这是我的问题。我想让它显示我显示的总计数,然后再显示两列有成功计数和失败计数。我不知道怎么做那部分。
所以看起来应该是
Failed Success Total Groups
53 5 58 Group 5
5 27 32 Group 77
如果我这样做查询,它会给我一个不同的前10名,因为失败或成功的计数很低。
SELECT top 10 Count(distinct FileID) AS Total, Groups
FROM Table
where Date = '2020-05-28' AND Status = 'Success'
group by Group
order by Total DESC
这里是我的查询,我得到超级接近,但要么总数双倍给出一个更高的数字,它应该。只有其中没有任何内容的记录才是正确的。
SELECT top 10 Count(distinct FileID) AS Total, Groups,
SUM(CASE WHEN status = 'Success' AND Date = '2020-05-28' THEN 1 ELSE 0 END) Success
FROM Table
group by Group
order by Total DESC
这就是结果
Total Group Success
58 Group 5 110 The correct one for this is 55
32 Group 77 0 The correct one for this is 0
32 Group 78 27 The correct one for this is 27
31 Group 99 9 The correct one for this is 3
29 Group 89 13 The correct one for this is 4
29 Group 34 15 The correct one for this is 4
1条答案
按热度按时间isr3a4wc1#
根据您使用的rdbms,oracle、mssql、postgresql等中都有窗口函数(几乎所有这些函数),您可以使用其中一个窗口函数
ROW_NUMBER()OVER(GROUP BY GROUP ORDER BY TOTAL DESC)
然后小心地写下一些案例到你的选择如下。