SELECT studentnum
FROM Atten
WHERE (att = 'Yes') AND (unitCode = 'MMA1034')
GROUP BY studentnum
HAVING (COUNT(*) < 4)
如何选择更多列?例如,student_name也是?
答案 0 :(得分:5)
如果学生信息在学生表中,则查询可能如下所示:
SELECT student_name, student_birth_day, studentnum
FROM Student S
RIGHT JOIN (
SELECT studentnum, count(*) as cnt
FROM Attendance
WHERE (attStatus = 'Yes')
AND (unitCode = 'MMA1034')
GROUP BY studentnum
HAVING (COUNT(*) < 4)
) A
ON A.studentnum = S.studentnum
答案 1 :(得分:0)
每个表或视图列中的任何非聚合表达式 列表必须包含在GROUP BY列表中
因此,如果在选择列表中未进行聚合,则必须将其包含在组中。
因此,如果您希望在选择列表中使用student_name
,那么您需要
SELECT studentnum,
student_name
FROM Attendance
WHERE (attStatus = 'Yes')
AND (unitCode = 'SIT103')
AND (CONVERT(VARCHAR, attDate, 101) < '10/10/2011')
GROUP BY studentnum,
student_name
HAVING (COUNT(*) < 4)
答案 2 :(得分:-2)
如果student_name存在于同一个表中,则需要在学生之后传递它
SELECT studentnum,student_name
如果student_name存在于不同的表中,则需要使用连接。