多选题
执行下面的语句会返回多少行数据?
SELECT DEPT_ID,SUM(SALARY)FROM EMP GROUP BY DEPT_ID HAVING
SUM(NVL(SALARY,100))>400;
假设EMP表有10行,除了一行的SALARY字段是空值之外,每行包含的SALARY值都为100。第一个5行的DEPT_ID值为10,第二个5行的DEPT_ID值为20,其中一行的SALARY值为空。
A、
两行
B、
一行
C、
零行
D、
以上都不对
【正确答案】
A
【答案解析】
依据其公共DEPT_ID值创建两个组。DEPT_ID值为10的组由5行组成,这些行的SALARY值是100。因此,该组的SUM(NVL(SALARY,100))函数返回500,它满足HAVING SUM(NVL(SALARY,100))>400子句。DEPT_ID值为20的组有4行,这些行的SALARY值为100,并且有一行包含空的SALARY。SUM(NVL(SALARY,100))返回500,这一组满足HAVING子句,因此返回2行。
B、C和D不正确。虽然SELECT子句包含SUM(SALARY),它对两个组返回500和400,但是HAVING子句包含SUM(NVL(SALARY,100))表达式,它指定组级行的包含和排除标准。如果HAVING子句确定有一组可以应用聚合函数,B就是正确的,C不正确是因为有两个要聚合的集合,所以返回两行。D不正确,因为A正确。
提交答案
关闭