mysql基础(5)

回顾一下之前所学的

1函数部分(sql语言+数学函数+字符串函数+控制流函数)

2.控制流函数  

         ---------if  支持嵌套,不建议多层 (了解 ifnull 和nullif)

         ---------case when (sql语句)

内容一:聚合(统计函数)函数(重点)---多行函数

需求: 对数据进行统计

概念:单行函数(函数作用于1行--每一次执行都作用一行)  

+多行函数(一次执行需要作用于对多行   )==》需求

求和 : sum      平均数:avg    最大值:max    最小值:min   计算行数:count

注意:  聚合函数之间不支持嵌套的!! 

例子1:求工资平均数

select avg(salary) from   worker;

# 注意:不要把 Null 认为0  NULL  自动去掉 不计入分母

例子2 : 统计行数(记录数)

三种表达方式

count(*)   count(列字段)  count(distinct  字段)

count(*)    计算记录总数  包含null

count(列字段) 计算记录总数  不包含null

count(distinct  字段)  先去重 再计算记录总数  不包含null

select count(*),count(salary),count(DISTINCT salary) from worker;

注意  空格和null 不一样的

空格计入记录总数  null 不会

select count(' ');

select count(null);

聚合函数之间仍然支持四则运算

例子3 sum函数

a商品和b商品的总销量

说明: 行记录相加

select
sum(sales_a) as "a商品销量",
sum(sales_b) as "b商品销量",
sum(sales_a)+sum(sales_b) as "总销量",
from  jw03_sale;

内容二:分组(group  by)+聚合函数一起使用(重点!)

 分组的原理:

 

例子:查询每一种 工作类型 最高工资  最低工资  工作人数 工资总和  平均工资

思路: 判定分组的字段

select type,max(salary),min(salary),count(*),sum(salary),avg(salary)   

from worker  GROUP BY type;

结论: 分组的时候 select 只能是聚合列(分组列)=整体信息

例子2:查看小组待遇最好=解析需求=》  分组后数据  按照总金额排序

select type,sum(salary) as jwsum

from worker  GROUP BY type order by jwsum ;

例子3 :只有特殊排序情况 分组的字段列和排序列 是同一列!!

分组的关键字 和排序关键字进行合并

select type,sum(salary) as jwsum

from worker  GROUP BY type order by type desc;

等价于

select type,sum(salary) as jwsum

from worker  GROUP BY type   desc;

例子3 分组后条件过滤

分组前where    分组后having

查询 总薪资超过  4000 小组名称

select type,sum(salary) as jwsum

from worker  GROUP BY  type   having  jwsum>4000 order by jwsum desc;

 创建一个业务表 给大家讲解的细致一点

例子1: 每个省份  店铺总销量

select province,sum(sales) as "总销量"  from jw05_shopsale

group by  province;

每个城市

select province,city, sum(sales) as "总销量"  from jw05_shopsale

group by  province,city;

例子2:店铺销量(分组后的条件)超过10的省份

select province, sum(sales) as jwsum  from jw05_shopsale

group by  province   having jwsum  >10;

魔鬼细节  

为什么 having后面可以使用 别名   但是group by 不可以使用别名?

答: group by执行顺序 先组内聚合运算  然后才产生别名,having一定是分组后的

条件可以使用别名

 

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Vlepro

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值