当我们刚开始学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的结合。
聚合函数,又称组函数。常见的聚合函数有:

1.count——返回找到的记录数;
2.min——返回一个数字列或计算列的最小值;
3.max——返回一个数字列或计算列的最大值;
4.sum——返回一个数字列或计算列的综合;
5.avg——对一个数字列或计算列求平均值;

当group by和聚合函数同时出现在一条语句中,若使用不当,常常会提示“不是单组分组函数”,这时候我们就需要深入的理解group by与聚合函数的关系了。
当我们同时使用group by和聚合函数时,应该牢记一点:分组group by一般与聚合函数连用,即先分组再聚合(如先分组再求和、先分组再求平均等等)

下面我举一个例子让大家更好的理解分组与聚合函数。

在result(供货)表中有以下数据:

mysql 不用group by能使用聚合函数么 group by 没有聚合函数_聚合函数


求1:每个供应商供货的产品总数量

select supplier_name,sum(product_number)
from result
group by supplier_name;

结果为:

mysql 不用group by能使用聚合函数么 group by 没有聚合函数_分组函数_02


其过程为:

先分组:

对supplier_name分组,得

mysql 不用group by能使用聚合函数么 group by 没有聚合函数_最小值_03


再求和:

对supplier_number求和,得

mysql 不用group by能使用聚合函数么 group by 没有聚合函数_聚合函数_04


最后得出结果。

再看一个较难的

求2:每个供应商每种货物的产品总数量。

这道题比第一道只是多了一个条件,在相同的供应商条件下,产品编号也要一样,所以我们只需要对供应商和产品编号同时分组即可

select supplier_name,product_id,sum(product_number)
from result
group by supplier_name,product_id;

由于分析过程与上一题类似,故不做重复。

结果为:

mysql 不用group by能使用聚合函数么 group by 没有聚合函数_最小值_05


相信经过修炼,你已经领悟了。