sql语句学习教程05_select排序_select分组_select查询_select语句_sql查询语句

教程发布:风哥 教程分类:MySQL教程 更新日期:2020-03-05 浏览学习:146

sql语句学习教程05_select排序_select分组_select查询_select语句_sql查询语句

1.select排序分组
语句的格式参考如下:
select  col_1, col_2, count(*), max(col_3)
from table_name
where ...
group by col_1, col_2
[having ...]
[order by ...][ asc | desc ]
其中group by是对数据进行分组;having字句和order by字句都是可选的,having字句是对统计出来的结果集进一步进行过滤筛选,order by则是对最后的结果数据进行排序。

例如:我们要统计各个部门的部门人数、部门最高薪资、最低薪资、平均薪资.
fgedu.net.cn @mysql> select dept, count(*), max(salary), min(salary),avg(salary) from itpux_yg group by dept;
+-----------+----------+-------------+-------------+-------------+
| dept      | count(*) | max(salary) | min(salary) | avg(salary) |
+-----------+----------+-------------+-------------+-------------+
| 技术部 |     2034 |       21000 |        3000 |  10593.4120 |
| 办公室 |     1959 |       21000 |        3000 |  10508.9331 |
| 市场部 |     2031 |       21000 |        3000 |  10661.7430 |
| 分公司 |     1976 |       21000 |        3000 |  10652.3279 |
+-----------+----------+-------------+-------------+-------------+
4 rows in set (0.18 sec)
其中,group by 就是分组语句,后面跟的dept,就是说明按部门分组,通过上面的数据,我们可以看到一条简单的语句就可以同时实现多个功能,即统计了部门的人数,也知道了各部门的最高、最低、平均薪资。如果要算各个部门的一个月的工资开销,也可以通过下面的语句实现:
fgedu.net.cn @mysql> select dept, sum(salary) from itpux_yg group by dept;
+-----------+-------------+
| dept      | sum(salary) |
+-----------+-------------+
| 技术部 |    21547000 |
| 办公室 |    20587000 |
| 市场部 |    21654000 |
| 分公司 |    21049000 |
+-----------+-------------+
4 rows in set (0.04 sec)
在这些统计函数中,我们还能对数值型数据进行计算,例如,公司要做出新的年度的薪资预算,预计平均涨薪幅度15%,那么统计数据可以用如下语句实现:
fgedu.net.cn @mysql> select dept, sum(salary*1.15*12) as dept_sal_budget  from itpux_yg  group by dept;
+-----------+-----------------+
| dept      | dept_sal_budget |
+-----------+-----------------+
| 技术部 |    297348600.00 |
| 办公室 |    284100600.00 |
| 市场部 |    298825200.00 |
| 分公司 |    290476200.00 |
+-----------+-----------------+
4 rows in set (0.05 sec)
另外,对于统计数据出来的结果,我们还可以通过having字句进行筛选,

例如,公司要对部门薪资年度预算最高的两个部门进行分析,那么我们需要先取出年度薪资调整预算最高的两个部门:
fgedu.net.cn @mysql> select dept, sum(salary*1.15*12) as dept_sal_budget  from itpux_yg  group by dept having sum(salary*1.15*12)>290000000 order by 2 desc limit 2;
+-----------+-----------------+
| dept      | dept_sal_budget |
+-----------+-----------------+
| 市场部 |    298825200.00 |
| 技术部 |    297348600.00 |
+-----------+-----------------+
2 rows in set (0.04 sec)
其中having就是对统计出来的结果集进一步进行筛选,筛选后的数据再进行排序,这里排序我们没有指明字段,而是用的数字2代替,意思就是用查询结果集的第二列进行排序,后面的desc是降序排序的意思(默认下的排序都是升序),最后limit 2,就是告诉MySQL,我对排序后的结果集只取前面两笔记录。


2.WITH ROLLUP关键字:
组内聚合计算,它的作用是对统计函数处理出结果后再次统计,案例如下:
fgedu.net.cn @mysql> select region,dept,SUM(salary) from itpux_yg group by region,dept with rollup;
+--------------+-----------+-------------+
| region       | dept      | SUM(salary) |
+--------------+-----------+-------------+
| 上海市    | 分公司 |      627000 |
| 上海市    | 办公室 |      576000 |
| 上海市    | 市场部 |      600000 |
| 上海市    | 技术部 |      645000 |
| 上海市    | NULL  |     2448000 |
| 云南省    | 分公司 |      676000 |
| 云南省    | 办公室 |      564000 |
| 云南省    | 市场部 |      540000 |
| 云南省    | 技术部 |      708000 |
| 云南省    | NULL  |     2488000 |
....
|NULL    | NULL   |  84837000 |
加了with rollup语句后,除了常规的汇总外,还对每个城市进行了汇总,在结尾部分还有一个全部的汇总,非常的像Excel中的分类汇总功能。

3.select其他基础操作
在MySQL的语句中,还有一些其它非常有用的关键字,来帮助我们处理结果集。

01.limit
限制返回的行数为5行
fgedu.net.cn @mysql> select * from yg limit 5;
从第三行开始取,取四行数据
fgedu.net.cn @mysql> select * from yg limit 3, 4;
fgedu.net.cn @mysql> select * from yg order by salary desc limit 1;

02.distinct
去除重复记录
fgedu.net.cn @mysql> select distinct sex from itpux_yg;

03.union
去重并集,把多个结果组合并去掉重复记录,再以第一列的结果进行升序排序;
fgedu.net.cn @mysql> select name from itpux11 union select name from itpux12;

04.union all

sql语句学习教程05_select排序_select分组_select查询_select语句_sql查询语句此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“fgedu”,获取验证码。在微信里搜索“风哥数据库运维”或者“itpux_com”或者微信扫描右侧二维码都可以关注本站微信公众号。

fgedu.net.cn @mysql> select * from yg for update;

网站声明:本文由风哥整理发布,转载请保留此段声明,本站所有内容将不对其使用后果做任何承诺,请读者谨慎使用!
【上一篇】sql语句学习教程06_update_sql update_update语句_update语法_sql增删改语句
【下一篇】sql语句学习教程04_select运算符_select查询_select语句_sql查询语句