Sql 获取计数与类别的最大(计数)匹配的记录
给定以下课程行、区段、等级、课程区段内的等级计数:Sql 获取计数与类别的最大(计数)匹配的记录,sql,sql-server,tsql,aggregate-functions,Sql,Sql Server,Tsql,Aggregate Functions,给定以下课程行、区段、等级、课程区段内的等级计数: course SECTION grade gradeCount ----------------------------------- 1301 001 C 3 1301 001 C+ 3 1301 001 C- 4 1301 001 D 5 1301 001 D+ 3 1301 001 D-
course SECTION grade gradeCount
-----------------------------------
1301 001 C 3
1301 001 C+ 3
1301 001 C- 4
1301 001 D 5
1301 001 D+ 3
1301 001 D- 2
1301 001 F 18
1301 002 A- 1
1301 002 B 1
1301 002 B- 3
1301 002 C 2
我想得到一份每个年级数量最多的课程/章节列表
例如:
Grade|Course|Section|Count
A | 1301| 023 | 75 // 1301-023 had the most A's, 75 of them
B | 1301| 033 | 65 // 1301-033 had the most B's, 65 of them
领带应该出现在列表中。您可以将GroupBy与聚合函数-max、count结合使用
-Cheers您可以在一个通用表表达式CTE中计算每一个字母等级的总和。然后,您可以使用“不存在”仅筛选出计数最高的等级:
; with s as
(
select course
, section
, left(grade,1) as Grade
, sum(gradeCount) sumGradeCount
from YourTable yt1
group by
course
, section
, left(grade,1)
)
select *
from s s1
where not exists
(
select *
from s s2
where s1.course = s2.course
and s1.section = s2.section
and s1.sumGradeCount < s2.SumGradeCount
)
假设至少有SQL Server 2005用于:
假设成绩计数已经是每个独特课程、部分和成绩的总成绩 首先找出每个等级的最高计数
SELECT
grade,
Max(gradeCount) as MaxGradeCount
FROM
table
然后查找原始表中具有最大坡度的行
SELECT
course,
section,
grade,
gradeCount
FROM
table
INNER JOIN
(SELECT
grade,
Max(gradeCount) as MaxGradeCount
FROM
table
) MaxGrades
ON table.grade = MaxGrades.grade
AND table.gradeCount = MaxGrades.MaxGradeCount
ORDER BY
table.grade
一个简单的内部连接,看不到CTE;- 你的输入与你的输出完全不匹配。你是不是把所有的分数都当作一样,就像A-和A+都是A的一样。该死的。我为一所大学的评分系统工作!!这不是@$家庭作业。@Caveatrob:通过更改子查询中的where子句修复,现在应该可以工作了。这太基本了,完全没有帮助。返回所有未修改的行。除了成绩外,你还必须在课程和部分上分组。@Andomar:在我的简单测试中不是这样的。我将用我的测试数据编辑答案。@Joe Stefanelli:在测试数据中添加'1301','003','A',100。现在,它将显示课程1301第003节的A级计数100和B级计数50。@Andomar:按照我对问题的解释,这是有效的。当然,一个班级/部门最多有一个以上的字母等级是可能的。@Joe Stefanelli:在我给出的例子中,B级的计数为50,a级的计数为100。对于明显不正确的答案,它不应返回B-1级。您正在使用MaxGradeCount作为列别名。MaxGradeCount.grade将返回语法错误。
SELECT
course,
section,
grade,
gradeCount
FROM
table
INNER JOIN
(SELECT
grade,
Max(gradeCount) as MaxGradeCount
FROM
table
) MaxGrades
ON table.grade = MaxGrades.grade
AND table.gradeCount = MaxGrades.MaxGradeCount
ORDER BY
table.grade