SQL入门学习2-聚合与排序
3-1 对表进行聚合查询
聚合函数
所谓聚合,就是将多行汇总为一行。
| 函数名 | 功能 |
|---|---|
| COUNT | 计算表中的记录数(行数) |
| SUM | 计算表中数值列的数据合计值 |
| AVG | 计算表中数值列的数据平均值 |
| MAX | 求出表中任意列中数据的最大值 |
| MIN | 求出表中任意列中数据的最小值 |
使用举例:
SELECT COUNT(*)
FROM Test ;
- COUNT
则会输入一条记录包括计算所有行的总数
计算NULL以外数据的行数
要计算列中非NULL的行数,那么可以直接使用列名当COUNT的参数。
例:SELECT COUNT (age)
FROM Test ;
** 除了COUNT外,其他函数不能使用星号(*)作为参数 **
- SUM & AVG
只能用于数值类型列。
在使用SUM时候,传入参数列名,计算时,将无视列中NULL项的数据。 - MIN & MAX
能够适用于任何数据类型的列。
具体比较大小的方式参照之前的比较运算符准则(字典序)。
删除重复记录
使用DISTINCT关键字
例如:
计算取出 重复数据 后的数据行数。
SELECT COUNT (DISTINCT name)
FROM Test ;
注意,DISTINCT必须写到括号中,因为必须要计算行数之前删除age中重复的数据。
3-2 对表进行分组
GROUP BY子句
将表中的记录,根据GROUP BY 子句后面的列,列中的内容 相同的为一组。
这样去分组。
GROUP BY 子句需要配合聚合函数使用。
只不过是将原表进行分组,然后再使用聚合函数。
也将GROUP BY 子句后面跟的列名,称为聚合键
语法:
SELECT <列名1>,<列名2>,<列名3>,<列名4>……
FROM <表名>
GROUP BY <列名1>,<列名2>,<列名3>,<列名4>……
例:
SELECT age , sex , COUTN (*)
FROM Test
GROUP BY age, sex ;
解释:即把age ,和sex 相同的记录项分为一组。
分出各个组之后,然后每个组都执行COUNT聚合函数,然后结果就为输出结果中的一项。
在SELECT子句中,可以不只一个聚合函数,可以同时有多个, 则结果会有多列的输出。
注意
- 在SELECT子句中的,除了聚合函数外,其他的列名都要出现在GROUP BY子句中。
- GROUP BY 子句的书写位置有要求,一定要书写在FROM、WHERE语句之后。
- 暂定语句书写顺序: SELECT - FROM - WHERE - GROUP BY
聚合键中包含NULL的情况
当聚合键中包含了NULL的情况,那么会将NULL作为一组特定的数据,归为一组。
当GROUP BY 与WHERE进行组合的时候,会先根据WHERE子句指定的条件进行过滤,然后再进行聚合处理。
各子句执行顺序
FROM-WHERE-GROUP BY-SELECT
与聚合函数和GROUP BY子句有关的常见错误
使用COUNT这类的聚合函数时,SELECT子句中智能存在以下三种元素:
- 常数
- 聚合函数
- GROUP BY 子句中指定的列名,顺序不一定要相同。
在GROUP BY 子句中写了列的别名
例如:SELECT name as myname , COUNT(*)
FROM Test
GROUP BY myname ;
这样的代码是错误的,GROUP BY 子句中不能够使用别名,要使用原来的列名。
在WHERE子句中使用了聚合函数
聚合函数只能使用在SELECT 以及HAVING函数中。
所以是不能能够使用在WHERE子句中的
以下为错误代码:SELECT name , COUNT(*)
FROM Test
WHERE COUNT(*) = 2
GROUP BY name;
3-3 为聚合结果指定条件
HAVING子句
WHERE子句,智能指定记录的条件,而不能用来指定组的条件。(例如“数据行数为2行”)
因此,需要使用HAVING子句
语法:
SELECT <列名1>, <列名2>, <列名3> ……
FROM <表名>
GROUP BY <列名1>, <列名2>, <列名3>……
HAVING <分组结果对应的条件>
HAVING子句必须写在GROUP BY子句的后面。
HAVING 子句和包含GROUP BY 子句时的SELECT子句一样,能够使用的要素有一定的限制。限制内容也是完全相同的。
- 常数
- 聚合函数
- GROUP BY 子句中指定的列名。
但是注意
聚合键所对应的条件不应该书写在HAVING子句中,而应该写咋WHERE子句当中。
3-4 对查询结果进行排序
在SELECT语句中,加入ORDER BY子句进行排序
语法:
SELECT <列名1>, <列名2>, <列名3>……
FROM <表名>
ORDER BY <排序基准列1>, <排序基准列2>,……
默认由低到高进行排序。
不管什么时候,ORDER BY子句都会写在SELECT所有子句的末尾。
处理顺序:
SELECT - FROM - WHERE - GROUP BY - HAVING - ORDER BY
另外可以设置多个排序键,进行更细致的排序。
升序或降序
只要在 ORDER BY 子句后面直接加上关键字就可以实现升序 或者降序的排序:
- ASC 升序(默认)
由小到大 - DESC 降序
由大到小
NULL的顺序
在排序键中,如果有NULL的项,NULL会在结果的开头或者末尾总显示
排序中使用别名。
在排序中可以使用别名。
为什么GROUP BY 不能使用别名,但是ORDER BY 子句中可以使用别名。
因为SQL语句在DBMS内部的执行顺序被掩盖起来了。
使用ongoingHAVING子句时SELECT语句的顺序
FROM - WHERE - GROUP BY - HAVING - SELECT - ORDER BY
一定要记得,SELECT子句的执行,一定在GROUP BY子句之后,但在ORDER BY子句之前。因此GROUP BY语句无法识别别名。
ORDER BY子句中可以使用的列
ORDER BY 子句中可以使用存在于表中,但不包含在SELECT 子句中的列。
且ORDER BY子句,也可以适使用聚合函数。
排序列编号
在ORDER BY子句中,还可以使用在SELECT子句中出现的列所对应的编号
例如:
SELECT name ,age
FROM Test
ORDER 2 DESC, 1;
这等价于
SELECT name, age
FROM Test
ORDER age DESC, name;
这样虽然使用起来非常方便,但是不推荐使用:
- 阅读起来比较困难。
- SQL-92明确说明该功能将来会被删除。
SQL入门学习2-聚合与排序的更多相关文章
- SQL入门学习5-函数、为此、CASE表达式
6-1. 各种各样的函数 函数的种类 算数函数 字符串函数 日期函数 转换函数 聚合函数 1.1算术函数 数据类型:NUMERIC 是大多数DBMS都支持的一种数据类型. 通过NUMBERIC(全体位 ...
- SQL入门学习1-查询基础
2-1 SELECT语句基础 SELECT语句作用 SELECT 语句用于从表中选取数据. 结果被存储在一个结果表中(称为结果集). 重点 使用SELECT语句从表中选取数据. 为列设定显示用的别名 ...
- SQList3 and SQL入门学习笔记
SQL 这是一个标准的计算机语言进行访问和操作数据库. 什么是 SQL? · SQL 指结构化查询语言 · SQL 使我们有能力訪问数据库 · SQL 是一种 AN ...
- SQL入门学习4-复杂查询
5-1 视图 视图和表 视图和表的区别只有一个是否保存了实际的数据 使用INSERT和SELECT实际上就是从存储设备中读取数据,各种计算后,将数据呈现给用户. 视图不会将数据保存在存储设备中.实际上 ...
- SQL入门学习3-数据更新
4-1 数据的插入(INSERT语句的使用方法) 使用INSERT语句可以向表中插入数据(行).原则上,INSERT语句背刺执行一行数据插入. CREATE TABLE 和INSERT 语句,都可以设 ...
- SQL入门学习0-数据库与SQL
1.1 DBMS DatabaseManagermentSystem 数据库管理系统 DBMS种类 层次型数据库(HDB) 最古老的数据库之一,把数据通过层次结构的方式表现. 关系型数据库(RDB) ...
- Sql入门学习——关系范式
--------关系 --------范式 一.三种关系 1.一对一关系 关系数据库中,第一个表中的单个行只可以与第二个表中的一个行相关,且第二个表中的一个行也只可以与第一个表中的一个行相关. 2.一 ...
- Sql入门学习——基本语法函数
--------使用工具navicat 快捷键操作 --------基本操作DML &DDL --------运算比较 --------数据类型 --------常用函数 --------常用 ...
- SQL入门学习6-集合运算
7-1 表的加减法 集合运算 集合运算就是对满足同一规则的记录,进行的加减等四则运算. 1.1 表的加法--UNION 表之间进行并集运算. 语法: SELECT 对应列1,对应列2-- FROM 表 ...
随机推荐
- Storm具体解释一、Storm 概述
一.Storm概述 Storm是一个分布式的.可靠的.零失误的流式数据处理系统. 它的工作就是委派各种组件分别独立的处理一些简单任务.在Storm集群中处理输入流的是Spout组件,而Spo ...
- 开源Office Word——DocX
1.前言 请阅读前请看以下这位大神的文章 http://www.cnblogs.com/asxinyu/archive/2013/02/22/2921861.html 另附两个附件 1.DocX.DL ...
- 【前段开发】行内元素和块级元素总结(HTML CSS)
块级元素 <address> information on author <blockquote> long quotation <button> push but ...
- Makefile 管理工具 — Automake and Autoconf
该project下载路径:http://files.cnblogs.com/iTsihang/hello-2.0.zip automake 參考资料:http://www.linuxforum.net ...
- mysql按ID排序(转)
自己建表的时候,把一个字段类型创建为varchar(2) ,其实应该建为int(2)的. 因为我只允许输出数字.这本来也没什么,无非就是占点空间,懒得改了.但是今天在后台发现排序有问题.于是,没办法, ...
- chain pattern
16.4 纯与不纯的职责链模式 职责链模式可分为纯的职责链模式和不纯的职责链模式两种: (1) 纯的职责链模式 一个纯的职责链模式要求一个具体处理者对象只能在两个行为中选择一个:要么承担 ...
- The practice program of C on point
//字符反向排列 //vision 1.2 #include<stdio.h> void reverse_string( char *str ) { char *string;//第一个字 ...
- iOS Crash获取闪回日志和上传server
首先我们整理常常会闪退的异常哪些:数组越界.空引用.引用没有定义方法.内存空间不足等等. 怎样获取crash闪退日志 -- 工具查看 先看第一个问题怎样查看,我搜索的方法有下面几个: 第一个方法:XC ...
- android 中国通信乱码问题
1.要解决中文乱码问题.首先得了解什么是字符编码 计算机要处理各种字符,就须要将字符和二进制内码相应起来,这样的相应关系就是字符编码. 要制定字符编码首先要确定字符集,并将 字符集内的字符排序.然后和 ...
- mapreduce程序来实现分类
文件的内容例如以下所看到的: 5 45 8 876 6 45 要求最后的输出格式: 1 5 2 6 3 8 4 45 5 45 5 876 首先,这个题目是须要对文 ...