DQL语句排序与分组

一、DQL-排序

排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列调整为“有序”的记录序列。分内部排序和外部排序,若整个排序过程不需要访问外存便能完成,则称此类排序问题为内部排序。反之,若参加排序的记录数量很大,整个序列的排序过程不可能在内存中完成,则称此类排序问题为外部排序。内部排序的过程是一个逐步扩大记录的有序序列长度的过程。

1.1、排序概述

将数据库表中杂乱无章的数据记录,通过字段的升序或降序的顺序排列的过程叫做排序。

1.2、排序语法

通过order by子句

格式:
select */字段列表 from 数据库表名 [where 条件表达式] [order by 字段名 [asc/desc]];

说明:

asc:升序,默认值

desc:降序

1.3、单列排序

按照一个字段进行排序

案例:

查看学生信息表中按照英语成绩升序排列,去掉成绩为null的学生。

mysql> select * from students where english is not null order by english;
+------+--------+------+------+---------+------+------------+-----------------+
| sid | sname | sex | age | english | math | entertime | remark |
+------+--------+------+------+---------+------+------------+-----------------+
| 6 | 王六 | 女 | 20 | 50.0 | 70.0 | 2017-09-01 | 他来自湖南 |
| 5 | 李三 | 男 | 19 | 60.0 | 88.0 | 2017-09-01 | 他来自湖北 |
| 2 | 李四 | 男 | 20 | 80.0 | 88.0 | 2017-09-01 | 他来自重庆 |
| 4 | 张八 | 男 | 18 | 80.0 | 85.0 | 2017-09-01 | 他来自天津 |
| 3 | 张红 | 女 | 19 | 86.0 | 80.0 | 2017-09-01 | 他来自北京 |
| 7 | 刘红 | 女 | 18 | 90.0 | 98.0 | 2017-09-01 | 他来自甘肃 |
| 1 | 张三 | 男 | 19 | 98.5 | 88.0 | 2017-09-01 | 他来自四川 |
+------+--------+------+------+---------+------+------------+-----------------+
7 行于数据集 (0.01 秒)

1.4、组合排序

按照多个字段进行排序,先按1字段排序,在按2字段排序,在按n字段排序

格式:
select */字段列表 from 数据库表名 [where 条件表达式] [order by 字段名1 [asc/desc],字段名2 [asc/desc],...,字段名n [asc/desc]];

案例:

查看学生信息表中先按照数学成绩升序排列,在按照英语成绩降序排列,最后去掉成绩为null的学生。

mysql> select * from students where english is not null order by math,english desc;
+------+--------+------+------+---------+------+------------+-----------------+
| sid | sname | sex | age | english | math | entertime | remark |
+------+--------+------+------+---------+------+------------+-----------------+
| 6 | 王六 | 女 | 20 | 50.0 | 70.0 | 2017-09-01 | 他来自湖南 |
| 3 | 张红 | 女 | 19 | 86.0 | 80.0 | 2017-09-01 | 他来自北京 |
| 4 | 张八 | 男 | 18 | 80.0 | 85.0 | 2017-09-01 | 他来自天津 |
| 1 | 张三 | 男 | 19 | 98.5 | 88.0 | 2017-09-01 | 他来自四川 |
| 2 | 李四 | 男 | 20 | 80.0 | 88.0 | 2017-09-01 | 他来自重庆 |
| 5 | 李三 | 男 | 19 | 60.0 | 88.0 | 2017-09-01 | 他来自湖北 |
| 7 | 刘红 | 女 | 18 | 90.0 | 98.0 | 2017-09-01 | 他来自甘肃 |
+------+--------+------+------+---------+------+------------+-----------------+
7 行于数据集 (0.02 秒)

二、DQL 分组

数据分组是根据统计研究的需要,将原始数据按照某种标准划分成不同的组别,分组后的的数据称为分组数据。

数据分组应遵循两个基本原则:

穷尽性原则

这一原则就是要求调查的每一单位都能无一例外地划归到某一组去,不会产生“遗漏”现象。

互斥性原则

这一原则就是要求将调查单位分组后,各个组的范围应该互不相容、互为排斥。即每个调查单位在特定的分组标志下只能归属某一组,而不能同时或可能同时归属到几个组。

2.1、分组概述

  • 什么是分组

分组就是将一组行记录按列或表达式的值分组成摘要行记录。通过GROUP BY子句返回每个分组的一个行记录。换句话说,它减少了在结果集中的行数。

  • 分组语法

– 语法

格式:
select */字段列表 from 数据库表名 [group by 分组字段名 [having 条件表达式]];

– 分组方式

将学生信息表中男、女同学进行分组

原始数据

分组为:男一组,女一组

返回每组第一条数据

2.2、分组应用

  • 实际分组方式
mysql> select sex from students group by sex;
+------+
| sex |
+------+
| 男 |
| 女 |
+------+
2 行于数据集 (0.01 秒)

注意:

当我们使用某个字段分组,在查询的时候也需要将这个字段查询出来,否则看不到数据属于哪组的。

单独分组没什么用处,分组的目的就是为了统计,一般分组会跟聚合函数一起使用。

案例:

查询学生信息表中男、女同学的人数

mysql> select sex,count(*) from students group by sex;
+------+----------+
| sex | count(*) |
+------+----------+
| 男 | 6 |
| 女 | 3 |
+------+----------+
2 行于数据集 (0.01 秒)
  • where与having

– where**

查询学生信息表中数学成绩在80分以上的,男、女同学的人数

#where后面不能用聚合函数
mysql> select sex,count(*) from students where math>80 group by sex;
+------+----------+
| sex | count(*) |
+------+----------+
| 男 | 4 |
| 女 | 1 |
+------+----------+
2 行于数据集 (0.01 秒)

注意:

where是将不符合条件的先去掉,在分组。

– having

查询学生信息表中男、女同学的人数,人数超过3人显示

#having n>3 可以写成 having count(*)>3
mysql> select sex,count(*) as n from students group by sex having n>3;
+------+---+
| sex | n |
+------+---+
| 男 | 6 |
+------+---+
1 行于数据集 (0.03 秒)

注意:

having是先分组,在将分组后不符合条件的去掉。

– where与having区别

where 子句

在分组之前过滤数据,即先过滤再分组。

where 后面不可以使用聚合函数。

having 子句

在分组之后过滤数据,即先分组再过滤。

having 后面可以使用聚合函数。

DQL语句排序与分组的更多相关文章

  1. DML和DQL语句

    DML操作: a.插入单行数据:      INSERT INTO 表名(列名,列名,...) VALUE(列值,列值,...); 表的字段名是可选的,如果省略,则一次插入所有字段 多个列表和多个值之 ...

  2. 6.2笔记-DQL语句查询数据库

    一.DQL语句 1.常量列 SELECT `StudentName` AS 姓名, `Address` AS 地址, '北京信息中心' AS 学校名称 FROM `student`; 2.常用函数 聚 ...

  3. mysql 怎样先排序再分组

    权游游牧族:众所周知!一句SqL语句不能先排序再分组.所以这里给出几个案例 --表结构-- create table `shop` ( `id` int (10) PRIMARY KEY, `shop ...

  4. sql中实现先排序后分组

    数据表结构和数据如下: CREATE TABLE `commun_message_chat_single` ( `id` ) NOT NULL AUTO_INCREMENT, `chat_id` ) ...

  5. Hadoop学习笔记—11.MapReduce中的排序和分组

    一.写在之前的 1.1 回顾Map阶段四大步骤 首先,我们回顾一下在MapReduce中,排序和分组在哪里被执行: 从上图中可以清楚地看出,在Step1.4也就是第四步中,需要对不同分区中的数据进行排 ...

  6. LINQ简明教程:数据排序、分组、过滤

    LINQ可以对很多数据源进行查询操作,比如数据库.数组(array).链表(list).XML文件等.在本文中,我将从数组中提取数据,这些数据是10个最受欢迎的国家.有一个类叫Countries,有c ...

  7. Statement执行DQL语句(查询操作)

    import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; import org.junit.T ...

  8. MySQL的外键,修改表,基本数据类型,表级别操作,其他(条件,通配符,分页,排序,分组,联合,连表操作)

    MySQL的外键,修改表,基本数据类型,表级别操作,其他(条件,通配符,分页,排序,分组,联合,连表操作): a.创建2张表 create table userinfo(nid int not nul ...

  9. MySql下实现先排序后分组

    最近在工作中遇到一个先排序后分组的需求,发现MySql不同的版本有不同的结果,特此记录. 举例:要求在shop表中查询出各类型商店中价格最高的商品. --表结构-- create table `sho ...

随机推荐

  1. JavaScript基础回顾知识点记录2

    js 使用嵌套for循环输出三角形 for(var i=0; i<5; i++){ //正三角 // for(var j=0; j<i+1; j++){ // document.write ...

  2. NC202475 树上子链

    题目链接 题目 题目描述 给定一棵树 T ,树 T 上每个点都有一个权值. 定义一颗树的子链的大小为:这个子链上所有结点的权值和 . 请在树 T 中找出一条最大的子链并输出. 输入描述 第一行输入一个 ...

  3. 给ShardingSphere提了个PR,不知道是不是嫌弃我

    说来惭愧,干了 10 来年程序员,还没有给开源做过任何贡献,以前只知道嘎嘎写,出了问题嘎嘎改,从来没想过提个 PR 去修复他,最近碰到个问题,发现挺简单的,就随手提了个 PR 过去. 问题 问题挺简单 ...

  4. Sentinel控制台1.8.3修改源码,修改配置后推送到Nacos

    目录 1. 接着上一篇 2. 思路 3. 下载Sentinel源码 4. 看Gateway里面读取的配置信息 5. 修改Sentinel控制台源码 6. 熔断规则测试 7. 限流规则测试 8. 打包使 ...

  5. c++基础思维导图2

    c++基础思维导图2 结构体 结构体的基本概念:用户自定义的数据类型 结构体定义和使用 struct 结构体名{结构体成员} struct 结构体名 变量名: struct 结构体名 变量名 = {成 ...

  6. Linux零拷贝原理

    Linux零拷贝原理 前言 磁盘可以说是计算机系统最慢的硬件之一,读写速度相差内存 10 倍以上,所以针对优化磁盘的技术非常的多,比如零拷贝.直接 I/O.异步 I/O 等等,这些优化的目的就是为了提 ...

  7. PLSQL Developer安装详细步骤,小白,转发

    下载软件可以直接在百度网盘里面下载 链接:https://pan.baidu.com/s/1bZNJ71d2-hvkM6PTbdpgAA 提取码:t9sh 然后直接参考这个链接进行安装https:// ...

  8. Taurus.MVC 微服务框架 入门开发教程:项目集成:6、微服务间的调用方式:Rpc.StartTaskAsync。

    系统目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 开源地址:https://github.com/cyq1162/Taurus.MVC 本系列第一篇:Tauru ...

  9. Django 运行报异常:AttributeError: 'str' object has no attribute 'get'

    Technorati Tags: Python,Django,Web 在使用django.contrib.auth用户机制进行用户的验证.登录.注销操作时,遇到这个异常. 首先是写了一个登录的视图,要 ...

  10. 发布日志 - kratos v2.1.0 版本发布

    github https://github.com/go-kratos/kratos/releases/tag/v2.1.0 新的功能 新增客户端负载均衡器(load balancing)和路由选择器 ...