小编典典

在SQL查询中需要范围的计数

sql

我有一张table,上面有所有学生的评分。我正在尝试获得范围内所有学生的人数,例如

0-9 =学生人数9

10 -19 =学生人数0 ,依此类推,最多100。

另外,如果有一些机构可以指出关于 案例陈述 的不错的教程,那将是非常好的

给出的答案很好。 但我的范围是固定的。如果没有申请人,我也必须显示0。 这是我的问题的主要区别。就像我也显示了类别。


阅读 289

收藏
2021-03-23

共1个答案

小编典典

您不需要CASE声明。您可以按整数除法的结果分组。

SELECT 10 * ( marks / 10 )     AS start_range,
       10 * ( marks / 10 ) + 9 AS end_range,
       count(*)                AS COUNT
FROM   testTable
GROUP  BY marks / 10

这将分组

0  -  9
10 - 19
/* ...*/
90 - 99
100 - 109

如果您不希望100自己位于某个范围内(作为最终范围内唯一可能的值),则需要更明确地定义需求。

要包括 所有 可以使用的范围

SELECT CAST(10 * ( G.Grp ) AS VARCHAR(3)) + '-' 
                          + CAST(10 * ( G.Grp ) + 9 AS VARCHAR(3)) AS range,
       count(T.id)                                                 AS Count
FROM   (VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9),(10)) G(Grp)
       LEFT JOIN [dbo].[testTable] T
         ON G.Grp = T.marks / 10
GROUP  BY G.Grp
2021-03-23