选择后从前10名中选择

ws51t4hk  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(231)

因此,我正在编写一个查询,从表中获取前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
isr3a4wc

isr3a4wc1#

根据您使用的rdbms,oracle、mssql、postgresql等中都有窗口函数(几乎所有这些函数),您可以使用其中一个窗口函数 ROW_NUMBER()OVER(GROUP BY GROUP ORDER BY TOTAL DESC) 然后小心地写下一些案例到你的选择如下。

CASE WHEN ... 'SUCCESS' THEN ROW_NUMBER()OVER(GROUP BY GROUP ORDER BY TOTAL DESC)
WHEN ...'FAIL' THEN
ROW_NUMBER()OVER(GROUP BY GROUP ORDER BY TOTAL ASC) END

相关问题