Oracle基础之groupby和聚合函数
当我们刚开始学Oracle时,见到group by,常常会来个三连问:为什么要⽤group by?group by应该怎么⽤?为什么写了group by运⾏时会提⽰“不是单组分组函数;不符合group by语法”?⾯对这些问题,我都胆战⼼惊了(怎么可能)。接下来我将把group by的⼼经要诀传授给你们,是不是很激动鸭,那就拿起你们的⼩本本记下来吧(收藏点赞+关注哦)。
何为group by
group by即分组
如何⽤group by
group by语法:
在select语句的⼀般格式中就有group by语句,group
by语句⼀般放在where语句的后⾯,若有having⼦句,则放在having⼦句之前。group
by后⾯加要分组的字段名或者表达式(视情境⽽定)。
如果仅仅只有group by⼦句,相信⼤家都懂,但是,那多没意思,以下介绍聚合函数与group by的结合。
聚合函数,⼜称组函数。常见的聚合函数有:
2.min——返回⼀个数字列或计算列的最⼩值;
3.max——返回⼀个数字列或计算列的最⼤值;
4.sum——返回⼀个数字列或计算列的综合;
5.avg——对⼀个数字列或计算列求平均值;
当group by和聚合函数同时出现在⼀条语句中,若使⽤不当,常常会提⽰“不是单组分组函数”,这时候我们就需要深⼊的理解group by 与聚合函数的关系了。
当我们同时使⽤group by和聚合函数时,应该牢记⼀点:分组group by⼀般与聚合函数连⽤,即先分组再聚合(如先分组再求和、先分组再求平均等等)。
下⾯我举⼀个例⼦让⼤家更好的理解分组与聚合函数。groupby是什么函数
在result(供货)表中有以下数据:
求1:每个供应商供货的产品总数量
select supplier_name,sum(product_number)
from result
group by supplier_name;
结果为:
其过程为:
先分组:
对supplier_name分组,得
再求和:
对supplier_number求和,得
最后得出结果。
再看⼀个较难的
求2:每个供应商每种货物的产品总数量。
这道题⽐第⼀道只是多了⼀个条件,在相同的供应商条件下,产品编号也要⼀样,所以我们只需要对供应商和产品编号同时分组即可
select supplier_name,product_id,sum(product_number) from result
group by supplier_name,product_id;
由于分析过程与上⼀题类似,故不做重复。
结果为:
相信经过修炼,你已经领悟了。