要用Group By的话,在Select语句中就要用分组函数吗(例如sum(*) ¦max(*))!为什么啊....
解决方案 »
- plsql中while循环怎么用
- 如果数据只有1条或者2条记录是否还有必要把该数据存储在数据库的某张表里?
- 求助,在线等!!
- oracle存储过程里面使用create table 的问题
- 能限制oracle的某一个session的系统资源么?
- Execute immediate 动态sql的问题,出现了错误
- 哪位牛人给帮我把这个sqlserver的触发器翻译成oracle的?
- 急啊。在线等,哪儿有关于OEM配置的技术文档啊?
- 请问Oracle数据库性能优化以及SQL语句优化有哪些?
- 我没有办法登陆oracle enterprise manager!!!
- 再次排序,用ORACLE-SQL求工序的顺序清单
- oracle 存储过程的执行
不过分组一般就用来干这个的
当然也可以用来过滤重复的
反正select 里的非聚合函数(SUM,MAX之类的就是单行聚合函数)的字段,都一定要出现在GROUP BY里的
name
王二
王二
张三
李四
李四
李四你用
select distincts name from a
出来的结果
name
王二
张三
李四用select name from a group by name
出来的结果
name
王二
张三
李四
出来的结果
name
王二
张三
李四
这个怎么就可以不用group by什么时候用group by 给几个例子
比如说你要统计同一部门的薪水总和,最高薪水,平均薪水之类
而如果是这样的数据name
王二
张三
李四你要把这些数据显示出来,假设没有重复,也不需要过滤重复的的
那你直接select name from a就行了
虽然select name from a group by name也能出来,不过效率不如上面的
name
王二
王二
张三
李四
李四
李四 你要统计每个出现过几次
select name ,count(*) from a group by name
就会出来
name count(*)
王二 2
张三 1
李四 3
你也可以写成select count(*) from a group by name
出来的结果
count(*)
2
1
3
出来的结果
count(*)
2
1
3 这个是先分组在统计的吗
多行聚合函数呢 都是什么啊 看了一下 没太明白
如果不加分组,必定只出来一行数据
加分组的话,对于同一分组,也必定同一分组只出来一行数据
所以叫单行聚合函数
用id不可以吗
而一些自定义函数里出现的字段,也需要出现在group by 里的像你上面的例子
select count(id), name form user group by id
这样肯定不行的,因为name不是聚合函数,又没出现在group by里
而
select count(id) form user group by id
这样是可以的
id一般情况下都是主键呀,你group by也没有意义吧!!!
最后一问:聚合函数里出现的字段,不需要出现的group by 里
而一些自定义函数里出现的字段,也需要出现在group by 里的 你要统计每个出现过几次
select name ,count(*) from a group by name
就会出来
name count(*)
王二 2
张三 1
李四 3
你也可以写成select count(*) from a group by name
出来的结果
count(*)
2
1
3 这里的name自定义函数里出现的字段吗写个例子看看
比如自定义函数的写法大概类似
select count(id) form user group by id
name 是多行
group by name 分组统计name ,
如 select count(id),name from user group by id,name;
select id from user group by id; = select distinct id from user;
select id, count(*) from user group by id;
这个就看你干什么用了,只要仔细理解一下就知道什么行,什么不行了