本文用到的表结构

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"的更多相关文章

  1. mysql中函数DISTINCT,group by,CONCAT及GROUP_CONCAT的使用

    一:DISTINCT 在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是 ...

  2. mysql distinct&group by 应用

    在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的 ...

  3. mysql 中order by 与group by的顺序

    mysql 中order by 与group by的顺序 是: select from where group by order by 注意:group by 比order by先执行,order b ...

  4. mysql 去除重复 Select中DISTINCT关键字的用法 在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是 distinct只能返回它的目标字段,而无法返回其它字段,这个问题让我困扰了很久,用distinct不能解决的话,

      在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记 ...

  5. ORDER BY,GROUP BY 和DI STI NCT 优化

    读<MySQL性能调优与架构设计>笔记之ORDER BY,GROUP BY 和DI STI NCT 优化 2015年01月18日 18:51:31 lihuayong 阅读数:2593 标 ...

  6. 转 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 ...

  7. mysql中select distinct的用法

    在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供有distinct这个关键字来过滤掉多余的重复记录只保留一条,但 往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的 ...

  8. Hive中笔记 :三种去重方法,distinct,group by与ROW_Number()窗口函数

    一.distinct,group by与ROW_Number()窗口函数使用方法 1. Distinct用法:对select 后面所有字段去重,并不能只对一列去重. (1)当distinct应用到多个 ...

  9. mysql中去重 distinct 用法

    在使用MySQL时,有时需要查询出某个字段不重复的记录,这时可以使用mysql提供的distinct这个关键字来过滤重复的记录,但是实际中我们往往用distinct来返回不重复字段的条数(count( ...

随机推荐

  1. JSON调试找不到 net.sf.ezmorph.Morpher

    JSON中,java.lang.NoClassDefFoundError: net/sf/ezmorph/Morpher问题解决 使用JSON,在SERVLET或者STRUTS的ACTION中取得数据 ...

  2. (转)C语言中长度为0的数组

    前面在看Xen的源码时,遇到了一段代码,如下所示: 注意上面最后一行的代码,这里定义了一个长度为的数组,这种用法可以吗?为什么可以使用长度为0 的数组?长度为的数组到底怎么使用?……这篇文章主要针对该 ...

  3. SQL中ROW_NUMBER()/RANK() /DENSE_RANK() OVER函数的基本用法

    一.ROW_NUMBER()的用法 语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN) row_number()从1开始,为每一条分组记 ...

  4. 【转载】Yui.Compressor高性能ASP.NET开发:自动压缩CSS、JS

    在开发中编写的js.css发布的时候,往往需要进行压缩,以减少文件大小,减轻服务器的负担.这就得每次发版本的时候,对js.js进行压缩,然后再发布.有没有什么办法,让代码到了服务器上边,它自己进行压缩 ...

  5. jstorm开发指南-写个简单的jstorm应用

    jstorm开发指南-写个简单的jstorm应用 发表于 2015-07-18   |   分类于 大数据   |   暂无评论 jstorm 是阿里巴巴开源的基于storm采用Java重写的一套分布 ...

  6. LeetCode 23 Merge k Sorted Lists(合并k个有序链表)

    题目链接: https://leetcode.com/problems/merge-k-sorted-lists/?tab=Description Problem: 给出k个有序的list, 将其进行 ...

  7. 【读书笔记】socket描述符选项[SOL_SOCKET]

    #include <sys/socket.h>    int setsockopt( int socket, int level, int option_name,             ...

  8. iOS - WKWebView的使用和长按手势识别二维码并保存

    WKWebView的图片二维码使用: .长按手势识别二维码并保存 .识别二维码跳转;不是链接显示内容点击网址跳转 .解决url包含中文不能编码的问题 .文字带链接网址,点击跳转 .纯文本-文字html ...

  9. ELK之filebate收集日志传递至Logstash

    软件版本查看(版本最好一致) 安装过程不详叙 本次使用filebeat监控nginx日志(已经配置json输出)收集并且传递给Logstash进行处理 filebeat配置文件/etc/filebea ...

  10. 字符串匹配 扩展KMP BM&Sunday

    复杂度都是O(n) 扩展1:BM算法 KMP的匹配是从模式串的开头开始匹配的,而1977年,德克萨斯大学的Robert S. Boyer教授和J Strother Moore教授发明了一种新的字符串匹 ...