sql-server - 基于范围的列数

标签 sql-server tsql count

我有一个学生成绩表,其架构如下:

Student
--------
SNO
Marks

我想产生这样的结果:

MarksRange   Count
----------   ------
0             10
10             2
20             43
:              :
100            2

以上结果表明有:

  • 10 名得零分的学生,
  • 2 名学生如何获得 1 到 10 之间的分数,
  • 43 从 11-20
  • 等等。

谁能告诉我如何编写产生此结果的查询?

最佳答案

试试这个:

DECLARE @Student table (SNO int,Marks int)

INSERT INTO @Student VALUES (1, 0)
INSERT INTO @Student VALUES (1, 3)
INSERT INTO @Student VALUES (1, 45)
INSERT INTO @Student VALUES (1, 95)
INSERT INTO @Student VALUES (1, 85)
INSERT INTO @Student VALUES (1, 97)
INSERT INTO @Student VALUES (1, 92)

DECLARE @StartNumber int
       ,@EndNumber   int
SELECT @StartNumber=0
      ,@EndNumber=100

;WITH AllNumbers AS
(
    SELECT @StartNumber AS Number
    UNION ALL
    SELECT Number+10
        FROM AllNumbers
        WHERE Number<@EndNumber
)
SELECT
    n.number AS MarksRange,COUNT(s.SNO) AS CountOf
    FROM AllNumbers               n
        LEFT OUTER JOIN @Student  s ON s.Marks=n.Number OR (s.Marks>n.Number-10 AND s.Marks<=n.Number)
    GROUP BY n.number

输出:

MarksRange  CountOf
----------- -----------
0           1
10          1
20          0
30          0
40          0
50          1
60          0
70          0
80          0
90          1
100         3

如果您使用的不是 SQL Server 2005+,则需要将 CTE 替换为 Numbers table .并使用如下查询:

SELECT
    n.number,COUNT(s.SNO),0 AS CountOf
    FROM Numbers                  n
        LEFT OUTER JOIN @Student  s ON s.Marks=n.Number OR (s.Marks>n.Number-10 AND s.Marks<=n.Number)
    WHERE n.Number>=@StartNumber AND n.Number<=@EndNumber AND CONVERT(decimal(3,1),n.Number/10)=n.Number/10.0
    GROUP BY n.number

关于sql-server - 基于范围的列数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3727867/

相关文章:

sql - 使用 INNER JOIN 从 2 个表中删除

sql - TSQL:包含 0-9 之间除 5 之外的所有数字的子字符串

sql-server - SQL Server 中的 Checksum()、Binary_Checksum() 和 CHECKSUM_AVG() 函数使用哪种算法?

php - 计算从 PHP `mysql_query` 函数返回的行数的可靠方法是什么?

javascript - 计算javascript中的单词并将其推送到一个对象中

sql-server - SQL Server : Index columns used in like?

sql-server - SQLBulkCopy 完成时的行计数

MySQL 字符串操作以计算字段中的值

sql-server - 使用 SSDT 的数据项目,如何引用另一个数据库而不将其填充到 SS Obj Explorer 中的同一项目文件夹中

sql-server - TSQL UDF每8个字符拆分字符串