Oracle出现不是group by 表达式的原因

Oracle不是group by 表达式的原因

今天在写sql语句中碰到一个不是group by 表达式的问题,

总结了一下产生这个问题的原因

第一,没有把所有的非聚合函数字段加入到group by 中

例如我们要查询一个班级学生的总成绩

select
b.姓名,
sum(c.成绩),
b.性别,
b.年龄
from
班级表 b,
成绩表 c
where
b.姓名=c.姓名
group by
b.姓名,
b.性别,
b.年龄

在这个sql中的group by中 姓名,性别,年龄都必须在 group by分组里
否则会出现 不是group by 表达式的错误。

第二,在group by 中不能用别名

比如

select
b.姓名 as name,
sum(c.成绩),
b.性别,
b.年龄
from
班级表 b,
成绩表 c
where
b.姓名=c.姓名
group by
name,
b.性别,
b.年龄

把姓名换成name 也是会出现 不是group by 表达式的错误
把name 改成b.姓名就可以了。

你可能感兴趣的:(数据库)