首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL Server模式SQL

SQL Server模式SQL
EN

Stack Overflow用户
提问于 2010-01-12 05:27:58
回答 3查看 4.7K关注 0票数 2

我有一个表,列出了每个班级的学生成绩。我想要一个如下所示的结果集:

代码语言:javascript
复制
BIO...B
CHEM...C

其中"B“和"C”是类的模式。我可以获得所有年级的模式,但不确定如何获得每个班级的模式

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-01-12 05:54:58

下面是SQL 2005/2008中类似的内容:

代码语言:javascript
复制
;WITH 
  Counts AS (
    SELECT ClassName, Grade, COUNT(*) AS GradeFreq 
    FROM Scores
    GROUP BY ClassName, Grade
    )
, Ranked AS (
    SELECT ClassName, Grade, GradeFreq
    , Ranking = DENSE_RANK() OVER (PARTITION BY ClassName ORDER BY GradeFreq DESC)
    FROM Counts
    )
SELECT * FROM Ranked WHERE Ranking = 1

或者仅仅是:

代码语言:javascript
复制
;WITH Ranked AS (
  SELECT 
    ClassName, Grade
  , GradeFreq = COUNT(*)
  , Ranking = DENSE_RANK() OVER (PARTITION BY ClassName ORDER BY COUNT(*) DESC)
  FROM Scores
  GROUP BY ClassName, Grade
  )
SELECT * FROM Ranked WHERE Ranking = 1
票数 4
EN

Stack Overflow用户

发布于 2010-01-12 05:31:22

使用GROUP BY子句。

代码语言:javascript
复制
SELECT className, ClassMode(className)
FROM Grades
GROUP BY className

当然,您必须创建Mode()函数,但它将是一个简单的函数,如:

代码语言:javascript
复制
CREATE FUNCTION ClassMode(@ClassName varchar(50))
RETURNS varchar(2)
AS
BEGIN
    Declare @temp varchar(2)

    SELECT @temp = TOP 1 Grade, COUNT(*) Grades as frequency
    FROM Grades
    WHERE ClassName = @ClassName
    GROUP BY ClassName
    ORDER BY frequency DESC

    RETURN @temp
END
票数 2
EN

Stack Overflow用户

发布于 2010-01-12 05:30:27

你只需要GROUP BY ClassName

代码语言:javascript
复制
SELECT ClassName, MODE(Grade) FROM YourTable GROUP BY ClassName
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2045075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档