达梦DCA证书考试有一道题目是:统计各部门工资总和,并列出大于80000的所有部门、ID和总工资数,当时手里少写了一个条件,练习的时候想起来了,记录一下大致如下:
我写的语句:
select
a.DEPARTMENT_ID as 部门编号,
sum(SALARY) as 部门工资,
DEPARTMENT_NAME as 部门名称
from
TEST.EMPLOYEE a,TEST.DEPARTMENT b
where a.DEPARTMENT_ID = b.DEPARTMENT_ID
group by
a.DEPARTMENT_ID
having sum(SALARY) > 80000
ORDER BY
a.DEPARTMENT_ID;
报错:
错误[-4080]:
不是 GROUP BY 表达式
问题原因:
ORACLE或者DMDB库中:GROUP BY后面必须加上你SELECT后面所查询的所有除聚合函数之外的所有字段,原语句太粗心少写了一个列。
正确语句:
select
a.DEPARTMENT_ID as 部门编号,
sum(SALARY) as 部门工资,
DEPARTMENT_NAME as 部门名称
from
TEST.EMPLOYEE a,TEST.DEPARTMENT b
where a.DEPARTMENT_ID = b.DEPARTMENT_ID
group by
a.DEPARTMENT_ID,DEPARTMENT_NAME
having sum(SALARY) > 80000
ORDER BY
a.DEPARTMENT_ID;
语句等价于:
select
a.DEPARTMENT_ID as 部门编号,
sum(SALARY) as 部门工资,
DEPARTMENT_NAME as 部门名称
from
TEST.EMPLOYEE a
inner join TEST.DEPARTMENT b
on
a.DEPARTMENT_ID = b.DEPARTMENT_ID
group by
a.DEPARTMENT_ID,
DEPARTMENT_NAME
having
sum(SALARY) > 80000
ORDER BY
a.DEPARTMENT_ID;
补充SQL基本关键词书写顺序规则:
select==》from==》where==》group by==》having==》order by
博客分享了一次在达梦DCA证书考试中遇到的问题,即在统计各部门工资总和并筛选超过80000的部门时,由于GROUP BY语句不完整导致的错误。博主详细解释了错误原因,并提供了正确的SQL语句,强调了GROUP BY子句需包含SELECT中所有非聚合字段。同时,博主还介绍了SQL语句的基本书写顺序规则。
331

被折叠的 条评论
为什么被折叠?



