Sql 如何申请分组,或者是否有其他选择?
这是我的桌子Sql 如何申请分组,或者是否有其他选择?,sql,Sql,这是我的桌子 id StudentName SubCode Grade Stdid 3 leena 1 A 1 4 leena 2 A 1 5 leena 3 B 1 1 pinky 1 A 1 2 pinky 2 A 1 8 smita 1
id StudentName SubCode Grade Stdid
3 leena 1 A 1
4 leena 2 A 1
5 leena 3 B 1
1 pinky 1 A 1
2 pinky 2 A 1
8 smita 1 A 1
7 Megha 1 A 2
6 Rupali 1 A 2
成绩从A到D。当同一个stid的成绩相同时,我只想显示一次记录,而不管子代码和学生名是什么。如果我获取的是特定的子代码,则应该是学生名。如果同一个stid的成绩不同,则显示两条记录。我想展示给大家看
StdId Studentname Subcode Grade
1 pinky 2 A
1 leena 3 B
2 Rupali 1 A
如果我使用这样的查询:
Select Max(StdId) as stid, Max(SubCode) as SubCode,max(Studentname) as Studentname ,Max(Grade) as Grade
From
Student_Grade
Group By
StdId, Grade
ORDER BY Stdid,grade,Studentname,SubCode
它给了我输出,但这是错误的
stid SubCode Studentname Grade
1 2 smita A
1 3 leena B
2 1 Rupali A
若我正在获取smita,smita子代码的值应该不是最大值。smita子代码的值是1
我认为max应该在studentname或subcode上应用,而不是两者都应用。如果我在其中一个上应用,group by将不起作用。如何处理这个问题?很难理解这个问题,但是
选择最大值(StdId)。。。。按StdId分组
绝对不是您需要的东西。悖论:)
按studentName对它们进行分组,并聚合其余的您可以尝试使用ROW_NUMBER()按记录分组,然后选择所需的数据
SELECT Stdid as StdId, DISTINCT StudentName as Studentname, MAX(SubCode) as Subcode, Grade
FROM Student_Grade
GROUP BY StudentName
;WITH CteFirstGroup AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY Stdid,Grade ORDER BY Stdid,Grade) AS GrpStdIdGrade
FROM (
SELECT id
,StudentName
,SubCode
,Grade
,Stdid
FROM Student_Grade)tbltemp),
--get only distinct records group by Stdid and Grade
SELECT id
,StudentName
,SubCode
,Grade
,Stdid FROM CteFirstGroup
WHERE GrpStdIdGrade = 1;
您使用的是哪种数据库管理系统?博士后?Oracle?问题不在于输出,而在于请求:您的查询不是满足您的请求所需的内容(顺便说一句,您的请求不清楚,正在阅读您的帖子…)。当与您的查询匹配时,输出是正确的;您正在执行一个非常奇怪的查询,该查询注定会生成该结果,并且会按要求执行。这是绝对错误的解决方案。他正是因为这个原因而面临问题,并在寻找其他解决方案。这不是标准的SQL,很可能是不正确的。此外,你没有解释为什么或者如何回答这个问题。“你能吗?”本,我的错。很难理解OP的问题。当我自己对语法和问题本身不太确定时,也许我不应该发布答案。谢谢你指出,伙计。:)