sql查询中需要范围计数
我在细节上有问题 我有一张会员表,上面有所有学生的分数。 我正试图计算出像这样的范围内所有学生的人数 0-9=学生人数9 10-19=学生人数0,以此类推,最多100人 另外,如果有人能指出一个很好的案例说明教程将是非常好的 给出的答案很好。但我的射程是固定的。如果没有申请人,我也必须显示0 这就是我的问题的主要区别。就像我已经展示了这个类别一样。你不需要案例陈述。您可以根据整数除法的结果进行分组sql查询中需要范围计数,sql,sql-server,tsql,Sql,Sql Server,Tsql,我在细节上有问题 我有一张会员表,上面有所有学生的分数。 我正试图计算出像这样的范围内所有学生的人数 0-9=学生人数9 10-19=学生人数0,以此类推,最多100人 另外,如果有人能指出一个很好的案例说明教程将是非常好的 给出的答案很好。但我的射程是固定的。如果没有申请人,我也必须显示0 这就是我的问题的主要区别。就像我已经展示了这个类别一样。你不需要案例陈述。您可以根据整数除法的结果进行分组 SELECT 10 * ( marks / 10 ) AS start_range,
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
尝试:
为了尽我所能解释CASE语句,更好的人可能会编辑它,我总是喜欢使用NULL选项,因为它有时会捕获查询中的错误。剩下的WHEN语句应该是自解释的,您可以根据自己的需要使用它们。名称Bucket就是您的列在最终输出中将被调用的名称,因此您可以随意更改它。第二列必须是聚合查询,例如COUNT,这样CASE语句才有意义
您必须在GROUP BY语句中重复CASE语句,但不包括您的姓名。如果您还需要空范围,请尝试以下操作:
;WITH Ranges
AS
(
SELECT 0 n
UNION ALL
SELECT n + 1 FROM Ranges
WHERE n < 9
)
SELECT CAST((n*10) as VARCHAR) + ' - ' + CAST((n*10 + 9) as VARCHAR) [Range], COUNT(marks) Cnt FROM Ranges
LEFT JOIN [testTable] T
ON marks >= (n*10) AND marks <= (n*10 + 9)
GROUP BY n*10, n*10 + 9
100属于什么范围?我的意思是100可以是该列中的最终分数值。我想要的是在40到50岁之间,我们有3个学生,等等……我问了一个问题后在O'Reilly的书中找到了一个很好的例子。这应该会让你非常接近:我认为建议的副本中接受的答案比需要的更复杂,答案非常好。但只需要修改一下。我还需要显示范围,如0-9,我们有0。在这种情况下,这对于meCAST10*标记/10作为varchar3+'-'+CAST10*标记/10+9作为varchar3是非常必要的,马丁再次提供了很大帮助。但我也需要显示类别,其中有0个申请人。我正在做年度比较,为此我需要这个精彩的。。。这就是我能说的。谢谢你,马丁。
;WITH Ranges
AS
(
SELECT 0 n
UNION ALL
SELECT n + 1 FROM Ranges
WHERE n < 9
)
SELECT CAST((n*10) as VARCHAR) + ' - ' + CAST((n*10 + 9) as VARCHAR) [Range], COUNT(marks) Cnt FROM Ranges
LEFT JOIN [testTable] T
ON marks >= (n*10) AND marks <= (n*10 + 9)
GROUP BY n*10, n*10 + 9