作者lueichun (你们看是小波耶!!!)
看板Database
标题[SQL ] Group by的意义
时间Wed Nov 6 20:25:10 2019
资料库名称:Oracle
资料库版本:
内容/问题描述:Oracle的group by语法,有个规定是若在select语句某个栏位使用
聚合函数(例如sum count avg max min),那麽表格其他栏位就需要被加到
group by子句里,例如以下网页某段叙述:
https://bit.ly/2WXTihj
如果查询中包含一个聚合函数,而所选择的列不在聚合函数中,那麽这些列就必须
出现在GROUP BY子句中.(不用聚合函数的列必须出现在group by後)
不这样做的话,会出现
ORA-00937: 不是一个单一群体的群体函数
那我请问在group by子句加上其他列,这样做在逻辑上的意义可以解释成以下这样吗:
因为使用了聚合函数,就相当於是将多个列的值浓缩成一个值,例如
max就是从多个列中取最大值;min就是取最小值;sum就是取出列所有值的总和这一个值。
那麽为了让这些值可以和其他栏位保持1:1的关系,所以必须要将其他列给group by起来,
例如同一个网页的另一段叙述:
例1 :select ename,sex from emp group by sex;
(错,ename没有用聚合函数,也没有出现在group by後面,因为将sex分成两组,
但ename有很多,到底输出那个ename呢?)
例2: select max(ename),sex from emp group by sex;(对)
----------------------------
上面那个例1讲到,ename对sex是多对1,导致输出时会无法决定要输出的值,而例2
则是让让资料依性别(男或女)group起来,然後再对这两个group取出ename最大值。
ename最大值和性别会是1比1的关系,这样输出时就可以顺利输出了。
我目前是这样理解,但我总觉得对於group by意义的解释,似乎哪里怪怪的不通顺
但是又想不出来。请问有人能帮忙解释一下group by逻辑上的意义吗?
拜托不要说「因为不这样写会跳错」......
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 1.167.52.45 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Database/M.1573043113.A.4A5.html
1F:推 criky: 就分组啊 11/06 23:07
2F:→ criky: 不用group by就是不分组,看全部的count,sum... 11/06 23:09
3F:→ criky: group by sex(gender)就是看男女的count,sum... 11/06 23:10
4F:推 cutekid: 你的理解是对的喔! 11/07 11:17
5F:推 ww90053: 我的解释,一群男人和一群女人分开比大小(你看,我的ena 03/27 21:43
6F:→ ww90053: me比较大~) 03/27 21:43