SQL组代码错误
在这个非常小的代码中,它不断地告诉我“组”周围有一些错误,但在我看来,代码是非常正确的吗SQL组代码错误,sql,sql-server,Sql,Sql Server,在这个非常小的代码中,它不断地告诉我“组”周围有一些错误,但在我看来,代码是非常正确的吗 SELECT grades.PERSON_ID, grades.GRADE, students.PERSON_ID, students.ENROLL_PERIOD, students.FACULTY_ID FROM students INNER JOIN grades ON students.PERSON_ID = grades.PERSON_ID W
SELECT
grades.PERSON_ID, grades.GRADE,
students.PERSON_ID, students.ENROLL_PERIOD, students.FACULTY_ID
FROM
students
INNER JOIN
grades ON students.PERSON_ID = grades.PERSON_ID
WHERE
GRADE = '00' or
GRADE ='-3' or
GRADE ='U' or
GRADE ='SY' or
GRADE ='IA' or
GRADE ='NI'
GROUP BY
students.PERSON_ID
ORDER BY
students.PERSON_ID;
如果您没有对列使用聚合函数,那么select中的所有函数都应该在GROUPBY子句中。分组方式根据列/列进行分组
SELECT
grades.PERSON_ID, grades.GRADE,
students.PERSON_ID, students.ENROLL_PERIOD, students.FACULTY_ID
FROM
students
INNER JOIN
grades ON students.PERSON_ID = grades.PERSON_ID
WHERE
GRADE = '00' or
GRADE ='-3' or
GRADE ='U' or
GRADE ='SY' or
GRADE ='IA' or
GRADE ='NI'
GROUP BY
grades.PERSON_ID, grades.GRADE,
students.PERSON_ID, students.ENROLL_PERIOD, students.FACULTY_ID
ORDER BY
students.PERSON_ID;
您需要使用聚合函数从每个组中找出最大等级。 试试这个
SELECT
students.PERSON_ID, Max(grades.GRADE) As Max_GRADE
FROM
students
INNER JOIN
grades ON students.PERSON_ID = grades.PERSON_ID
WHERE
GRADE = '00' or
GRADE ='-3' or
GRADE ='U' or
GRADE ='SY' or
GRADE ='IA' or
GRADE ='NI'
GROUP BY
students.PERSON_ID
ORDER BY
students.PERSON_ID;
我猜你根本不想要聚合。只有这些成绩之一的学生 您的查询可以通过三种方式简化:
- 表别名
IN
- 在结果集中不包括两次
PERSON\u ID
SELECT s.PERSON_ID, g.GRADE, s.ENROLL_PERIOD, s.FACULTY_ID
FROM students s INNER JOIN
grades g
ON s.PERSON_ID = g.PERSON_ID
WHERE g.GRADE IN ('00', '-3', 'U', 'SY', 'IA', 'NI')
ORDER BY s.PERSON_ID;
如果您希望每个个人ID
有一个任意行(如错误使用分组依据所示),可以使用SQL Server技巧:
SELECT TOP (1) WITH TIES . . .
. . .
ORDER BY RANK() OVER (PARTITION BY s.PERSON_ID ORDER BY (SELECT NULL))
将此GRADE='NI'或
更改为此GRADE='NI'
让我猜猜,MySQL背景?如果是,则与:同样,将此students.PERSON\u ID,
更改为students.PERSON\u ID
如果不使用聚合函数,为什么要分组?“Most”建议使用MAX()
函数,为什么不使用它?列“grades.PERSON_ID”在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。。。原因是什么?似乎找不到分数最高的人?它只是列出了所有属于这些等级的人员ID