多选题 执行下面的语句会返回多少行数据?
SELECT DEPT_ID,SUM(NVL(SALARY,100))FROM EMP
GROUP BY DEPT_ID HAVING SUM(SALARY)>400;
假设EMP表有10行,除了一行的SALARY字段是空值外,每行包含的SALARY值都为100。第一个5行的DEPT_ID值为10,第二个5行的DEPT_ID值为20,其中一行的SALARY值为空。
【正确答案】 B
【答案解析】依据其公共DEPT_ID值创建两个组。DEPT_ID值为10的组由5行组成,这些行的SALARY值都是100。因此,该组的SUM(SALARY)函数返回500,它满足HAVINGSUM(SALARY)>400子句。DEPT_ID值为20的组有4行,这些行的SALARY值为100,并且有一行包含空的SALARY。SUM(SALARY)只返回400,该组不满足HAVING子句的条件。
A、C和D不正确。注意SELECT语句中的SUM(NVL(SALARY,100))表达式。这个表达式选择输出的格式,它不限制或者限定数据集。如果HAVING子句确定有两组可以应用聚合函数,A就是正确的,C不正确是因为只有一个要聚合的集合,所以只返回一行。D不正确是因为B正确。