永发信息网

oracle中,还是不甚明白order by和group by的用法

答案:3  悬赏:0  手机版
解决时间 2021-04-07 15:38
  • 提问者网友:温柔港
  • 2021-04-07 05:07
oracle中,还是不甚明白order by和group by的用法
最佳答案
  • 五星知识达人网友:往事埋风中
  • 2021-04-07 05:13
我甚是理解你 我开始也很不明白
order by是排序
如order by ID 表示按ID 升序排列
order by ID,NUM 表示优先按照ID排序 ID相同的再按NUM排序 这个意思

group by 是分组
首先用group by 的前提是你的select里边用了聚合函数如sum(),avg(),min(),max()
没有聚合函数用不了group by会报错
其次 出现在select里边的除聚合函数以外的所有字段 都必须作为group by的条件
出现在group by中的字段可以不select出来
也就是说 select中的字段必须出现在group by中 group by中的分组条件不一定出现在select中
你的例子中 select * 表示所有字段 这个时候必须所有字段group by 你只group by deptno肯定报错
再次 group by 的顺序类似order by
如 group by A,B,C,D责先按A分组 再按BCD这个顺序分组
group by条件越多分组越细 也就是说 假如A是学校 B是学院 C是专业 D是班级 那最后group by的结果是按照有多少个不同的班级分组 按照最细致的分组

因为我对这个感触颇深希望我的理解对你有帮助追问最细致的分组,比如说A可以是清华,北大;B是计算机,电子;C是编程技术,网络基础;D是计算机科学班1,电气化科学班2;
那排序是按照计算机科学班1和电气化科学班2分组,但是这两个班既可以是网络专业,也可以是编程技术的,还可以是计算机学院的,也可以是电子学院的。。而且或许是清华的或许是北大的?
还是很乱套的样子。追答所以说group by的条件越多 分组越细 越没有意义
给你一个前辈给我讲时的列子你再理解一下:
A B C D 数量
001 B1 C1 D1 10
001 B2 C2 D2 20
002 B3 C3 D3 30
002 B3 C3 D4 40
GROUP BY条件 分组结果求SUM(数量)
A 2行 30
70
A,B 3行 10
20
70
A,B,C 3行 10
20
70
A,B,C,D 4行 10
20
30
40
我觉得这个例子应该很明确分组概念了 你可以理解一下
如果还不明白可以继续探讨
全部回答
  • 1楼网友:蓝房子
  • 2021-04-07 07:06
一个排序 一个分组 怎么不明白呀 不是一个意义呀
一个是用来改结果集的顺序的
一个是用来统计某些字段信息的
group by 不带排序功能
你可以group by了之后 order by 1,2
  • 2楼网友:怀裏藏嬌
  • 2021-04-07 06:04
order by 顾名思义,就是排序的意思 order by 某列(column) 就是你查看的结果是根据某列的升降序显示的。
group by ,分组函数,关注的是 group by 列,中列的查询结果。当 group by和order by 一起使用时,先执行group by 在执行 order by。

你的sql 使用了聚合函数,是对 avg()max() 列做平均和最大值运算,是以这2个共同结果为分组的。追问以这两个结果分组?那结果是随意显示的么?既然分组了 怎么看不出谁和谁是一组?追答你可以吧查询结果贴出来一下,结果是 以上2个分组+avg()升序来显示。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯