这个问题的扩展在这里,我怎样才能获取所有达到最大允许缺勤的学生的计数。
我试过这个
SELECT COUNT(*) FROM
(
SELECT student_id,
COUNT(attendance)
FROM student_attendance
WHERE attendance = 'ABSENT'
GROUP BY student_id
HAVING COUNT(attendance) = (SELECT max_allowed
FROM configurations)
) abc
但它不起作用并出现此错误:
没有为“abc”的第 2 列指定列。
环境: SQL Server 2000
COUNT(attendance)
尝试为- 例如添加列名称CountAttendance
。COUNT(attendance)
从SELECT
子查询的子句中删除也应该有效(如您所见)。因为子查询中的所有列都应该命名/别名。一些 DBMS(和一些版本)不需要这个,因为它们自己提供任意名称。其他的,如 SQL Server,限制性更强。
您甚至可以
SELECT 1 AS c
在子查询或中有一个列SELECT NULL AS c
。外部查询只需要计算行数,COUNT(*)
因此子查询中的列列表完全不相关。重要的是WHERE
andHAVING
子句。