题目
统计每个授课学年每个教师的授课总门数。下列语句正确的是()。A. SELECT 授课学年, 教师号, COUNT(*)FROM 授课 GROUP BY 授课学年, 教师号B. SELECT 授课学年, 教师号, COUNT(教师号)FROM 授课 GROUP BY 授课学年, 教师号C. SELECT 授课学年, 教师号, COUNT(课程号)FROM 授课 GROUP BY 授课学年, 教师号D. SELECT 授课学年, 教师号, COUNT(DISTINCT 教师号)FROM 授课 GROUP BY 授课学年, 教师号
统计每个授课学年每个教师的授课总门数。下列语句正确的是()。
A. SELECT 授课学年, 教师号, COUNT(*)FROM 授课 GROUP BY 授课学年, 教师号
B. SELECT 授课学年, 教师号, COUNT(教师号)FROM 授课 GROUP BY 授课学年, 教师号
C. SELECT 授课学年, 教师号, COUNT(课程号)FROM 授课 GROUP BY 授课学年, 教师号
D. SELECT 授课学年, 教师号, COUNT(DISTINCT 教师号)FROM 授课 GROUP BY 授课学年, 教师号
题目解答
答案
A. SELECT 授课学年, 教师号, COUNT(*)FROM 授课 GROUP BY 授课学年, 教师号
解析
本题考查 SQL 中分组统计的知识,解题思路是要明确统计每个授课学年每个教师的授课总门数,需要按照授课学年和教师号进行分组,然后统计每组的记录数。
在 SQL 中,GROUP BY 子句用于将结果集按照指定的列进行分组,COUNT() 函数用于统计记录的数量。
下面对每个选项进行分析:
- A选项:
SELECT 授课学年, 教师号, COUNT(*)FROM 授课 GROUP BY 授课学年, 教师号。COUNT(*)会统计分组后每组的所有记录数,这里按照授课学年和教师号分组,统计的就是每个授课学年每个教师的授课总门数,因为每一条记录代表一门课程,所以该选项正确。 - B选项:
SELECT 授课学年, 教师号, COUNT(教师号)FROM 授课 GROUP BY 授课学年, 教师号。COUNT(教师号)同样会统计分组后每组的记录数,但是如果教师号字段存在NULL值,COUNT(教师号)会忽略这些NULL值,而COUNT(*)会统计所有记录,包括NULL值所在的记录,所以该选项不如 A 选项准确。 - C选项:
SELECT 授课学年, 教师号, COUNT(课程号)FROM 授课 GROUP BY 授课学年, 教师号。COUNT(课程号)会统计课程号不为NULL的记录数,如果课程号字段存在NULL值,统计结果会不准确,而我们要统计的是授课总门数,应该统计所有记录,所以该选项错误。 - D选项:
SELECT 授课学年, 教师号, COUNT(DISTINCT 教师号)FROM 授课 GROUP BY 授课学年, 教师号。COUNT(DISTINCT 教师号)会统计分组后每组中不同教师号的数量,而不是授课总门数,所以该选项错误。