mysql "order by" "distinct" "group by" "having"
本文用到的表结构
create table stu(
stu_id int auto_increment primary key,
name varchar(30) not null,
age smallint,
cls_id int
);
1、order by 排序 默认升序
1)单列排序,只按照某列排序
mysql> select name, age from stu order by name;
+-----------+------+
| name | age |
+-----------+------+
| guojing | 25 |
| huangrong | 23 |
| lisi | 20 |
| wangwu | 17 |
| xiaolongn | 14 |
| zhangsan | 18 |
| zhangsan | 18 |
| zhangsan | 15 |
| zhangsan | 17 |
| zhaoliu | 15 |
+-----------+------+
10 rows in set (0.00 sec)
2)多列排序,当第一列值相同时,按第二列排序,以此类推多列排序
mysql> select name, age from stu where name='zhangsan' order by name,age;
+----------+------+
| name | age |
+----------+------+
| zhangsan | 15 |
| zhangsan | 17 |
| zhangsan | 18 |
| zhangsan | 18 |
+----------+------+
4 rows in set (0.01 sec)
3)在要进行排序的字段后边添加。降序,"order by 字段 desc" 升序 "order by 字段 asc" 没有说明的将默认升序
mysql> select name, age from stu order by name desc, age asc;
+-----------+------+
| name | age |
+-----------+------+
| zhaoliu | 15 |
| zhangsan | 15 |
| zhangsan | 17 |
| zhangsan | 18 |
| zhangsan | 18 |
| xiaolongn | 14 |
| wangwu | 17 |
| lisi | 20 |
| huangrong | 23 |
| guojing | 25 |
+-----------+------+
10 rows in set (0.00 sec)
2、distinct 将查询的结果去掉重复值
mysql> select distinct name from stu;
+-----------+
| name |
+-----------+
| zhangsan |
| lisi |
| wangwu |
| zhaoliu |
| guojing |
| huangrong |
| xiaolongn |
+-----------+
7 rows in set (0.00 sec)
3、聚合函数
聚合函数也称分组函数,总共有5个:聚合函数忽略空值
- count 统计记录总数
- sum 求和
- avg 求平均值
- max 取最大值
- min 取最小值
1)求stu表的总记录数
mysql> select count(*) as 总记录数 from stu;
+--------------+
| 总记录数 |
+--------------+
| 7 |
+--------------+
1 row in set (0.00 sec)
2)求stu表的学生总最大值,最小值,平均值,年龄
mysql> select max(age) as 最大值, min(age) as 最小值, avg(age) as 平均值, sum(age) as 年龄总和 from stu;
+-----------+-----------+-----------+--------------+
| 最大值 | 最小值 | 平均值 | 年龄总和 |
+-----------+-----------+-----------+--------------+
| 25 | 14 | 18.8571 | 132 |
+-----------+-----------+-----------+--------------+
1 row in set (0.00 sec)
4、分组查询
分组查询中只能使用聚合函数与参与分组的字段
1)查询每个班的年龄最大值,最小值,平均值,总和
mysql> select cls_id, max(age), min(age), avg(age), sum(age) from stu group by cls_id;
+--------+----------+----------+----------+----------+
| cls_id | max(age) | min(age) | avg(age) | sum(age) |
+--------+----------+----------+----------+----------+
| 1 | 18 | 14 | 16.0000 | 32 |
| 2 | 25 | 17 | 21.0000 | 42 |
| 3 | 23 | 15 | 19.3333 | 58 |
+--------+----------+----------+----------+----------+
3 rows in set (0.00 sec)
2)查询每个班的人数
mysql> select cls_id, count(*) from stu group by cls_id;
+--------+----------+
| cls_id | count(*) |
+--------+----------+
| 1 | 2 |
| 2 | 2 |
| 3 | 3 |
+--------+----------+
3 rows in set (0.01 sec)
4、having
having子句用于分组后的数据筛选,不用where的原因是where不能和聚合函数一起使用,这里涉及到sql的执行顺序的问题
1)查找平均年龄大于18的班级
mysql> select cls_id, avg(age) from stu group by cls_id having avg(age) > 18;
+--------+----------+
| cls_id | avg(age) |
+--------+----------+
| 2 | 21.0000 |
| 3 | 19.3333 |
+--------+----------+
2 rows in set (0.00 sec)
mysql "order by" "distinct" "group by" "having"的更多相关文章
- mysql中函数DISTINCT,group by,CONCAT及GROUP_CONCAT的使用
一:DISTINCT 在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是 ...
- mysql distinct&group by 应用
在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的 ...
- mysql 中order by 与group by的顺序
mysql 中order by 与group by的顺序 是: select from where group by order by 注意:group by 比order by先执行,order b ...
- mysql 去除重复 Select中DISTINCT关键字的用法 在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是 distinct只能返回它的目标字段,而无法返回其它字段,这个问题让我困扰了很久,用distinct不能解决的话,
在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记 ...
- ORDER BY,GROUP BY 和DI STI NCT 优化
读<MySQL性能调优与架构设计>笔记之ORDER BY,GROUP BY 和DI STI NCT 优化 2015年01月18日 18:51:31 lihuayong 阅读数:2593 标 ...
- 转 SQL Union和SQL Union All两者用法区别效率以及与order by 和 group by配合问题
SQL Union和SQL Union All两者用法区别效率以及与order by 和 group by配合问题 SQL Union和SQL Union All用法 SQL UNION 操作符 UN ...
- mysql中select distinct的用法
在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供有distinct这个关键字来过滤掉多余的重复记录只保留一条,但 往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的 ...
- Hive中笔记 :三种去重方法,distinct,group by与ROW_Number()窗口函数
一.distinct,group by与ROW_Number()窗口函数使用方法 1. Distinct用法:对select 后面所有字段去重,并不能只对一列去重. (1)当distinct应用到多个 ...
- mysql中去重 distinct 用法
在使用MySQL时,有时需要查询出某个字段不重复的记录,这时可以使用mysql提供的distinct这个关键字来过滤重复的记录,但是实际中我们往往用distinct来返回不重复字段的条数(count( ...
随机推荐
- Linux chmod和chown更改文件目录的所属者命令的用法
一.chown 命令 用途:更改文件的所有者或组.命令由单词change owner组合而成. 使用示例: 1,更改文件的所有者: chown jim program.c 文件 program.c 的 ...
- linux shell 随机字符生成单词
#!/bin/sh #生成随机5个单词 filecount= wordcount= flag= #-lt -le -gt -ge -eq #while [ $f -lt $filecount ]; # ...
- nsi脚本中执行.bat文件要隐藏dos窗口问题
问题原因:工作中,在一个nsi的安装脚本文件中需要安装虚拟摄像头驱动,安装驱动脚本是.bat文件.使用nsi的execwait函数执行.bat文件时会显示dos窗口.但是领导要求不能显示dos窗口. ...
- iOS - 转场时 appear 与 disappear 的调用顺序探索
不同的转场方式 A.B viewDidDisappear调用的流程不同 在A页面跳转到B页面的过程中 A 的 viewDidDisappear 方法和 B 的 viewDidAppear 谁先调用? ...
- Linux下添加FTP账号和服务器、增加密码和用户,更改FTP目录
1. 启动VSFTP服务器 A:cenos下运行:yum install vsftpd B. 登录Linux主机后,运行命令:”service vsftpd start” C. 要让FTP每次开机 ...
- Church 整数前驱的推导
Church 整数前驱的推导比其后继复杂得多,wiki中一个前驱的定义据王垠的博客里说,是他一个数学系的同学花一星期时间推导出来的, 其定义确实比其它介绍lambda的文章中用pair来实现(据说是图 ...
- java基础---->git的使用(一)
这里面记录一下git的使用,只是平时工作中遇到的一些问题的解决方案,不会涉及到git的一些基础概念及说明.人的天性便是这般凉薄,只要拿更好的来换,一定舍得. Git的一些使用 一.在码云建立好仓库之后 ...
- 转载:C/C++关于string.h头文件和string类
学习C语言时,用字符串的函数例如stpcpy().strcat().strcmp()等,要包含头文件string.h 学习C++后,C++有字符串的标准类string,string类也有很多方法,用s ...
- 移动端rem自适应布局(切图)
本篇适用于初次使用rem为单位切图而无从下手的童鞋.核心是根据屏幕动态改变根元素字体大小,以达到适配各种屏幕.这只是一个拿来就用的教程.很多东西没有详细说明.不过对于快速做手机端切图很有帮助. 模板: ...
- java(8) HashMap源码
系统环境: JDK1.7 HashMap的基本结构:数组 + 链表.主数组不存储实际的数据,存储的是链表首地址. 成员变量 //默认数组的初始化大小为16 static final int DEFAU ...