达梦数据库中的GROUP BY语句

博客分享了一次在达梦DCA证书考试中遇到的问题,即在统计各部门工资总和并筛选超过80000的部门时,由于GROUP BY语句不完整导致的错误。博主详细解释了错误原因,并提供了正确的SQL语句,强调了GROUP BY子句需包含SELECT中所有非聚合字段。同时,博主还介绍了SQL语句的基本书写顺序规则。

达梦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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值