我有一个表,列出了每个班级的学生成绩。我想要一个如下所示的结果集:
BIO...B
CHEM...C其中"B“和"C”是类的模式。我可以获得所有年级的模式,但不确定如何获得每个班级的模式
发布于 2010-01-12 05:54:58
下面是SQL 2005/2008中类似的内容:
;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或者仅仅是:
;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发布于 2010-01-12 05:31:22
使用GROUP BY子句。
SELECT className, ClassMode(className)
FROM Grades
GROUP BY className当然,您必须创建Mode()函数,但它将是一个简单的函数,如:
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发布于 2010-01-12 05:30:27
你只需要GROUP BY ClassName
SELECT ClassName, MODE(Grade) FROM YourTable GROUP BY ClassNamehttps://stackoverflow.com/questions/2045075
复制相似问题