SQL --Chater03 聚合与排序

数据说明:

+-----------+------------+---------------+--------------+--------------+------------+
| shohin_id | shohin_mei | shohin_bunrui | hanbai_tanka | shiire_tanka | torokubi   |
+-----------+------------+---------------+--------------+--------------+------------+
| 0001      | T恤        | 衣服          |         1000 |          500 | 2009-09-20 |
| 0002      | 打孔器      | 办公用品      |          500 |          320 | 2009-09-11 |
| 0003      | 运动T恤     | 衣服          |         4000 |         2800 | NULL       |
| 0004      | 菜刀        | 厨房用具      |         3000 |         2800 | 2009-09-20 |
| 0005      | 高压锅      | 厨房用具      |         6800 |         5000 | 2009-01-15 |
| 0006      | 叉子        | 厨房用具      |          500 |         NULL | 2009-09-20 |
| 0007      | 擦菜板      | 厨房用具      |          880 |          790 | 2008-04-28 |
| 0008      | 圆珠笔      | 办公用品      |          100 |         NULL | 2009-11-11 |
+-----------+------------+---------------+--------------+--------------+------------+
8 rows in set (0.00 sec)

对表进行聚合查询

聚合函数:

COUNT:计算表中的记录数(行数)。

SUM:计算表中数值列的数据合计值。

AVG:计算表中数值列的数据平均值。

MAX:求出表中任意列中数据的最大值。

MIN:求出表中任意列中数据的最小值。

COUNT函数的结果根据参数的不同而不同。COUNT(*)会得到包含NULL的数据行数,而COUNT(<列名>)会得到NULL之外的数据行数。

聚合函数会将NULL排除在外。但COUNT(*)例外,并不会排除NULL。

MAX/MIN函数几乎适用所有数据类型的列。SUM/AVG函数只适用数字类型的列。

想要计算值得种类时,可以在COUNT函数的参数中使用DISTINCT。

在聚合函数的参数中使用DISTINCT,可以删除重复数据。

对表进行分组

SELECT shohin_bunrui, COUNT(*)
  FROM Shohin
 GROUP BY shohin_bunrui;

+---------------+----------+
| shohin_bunrui | COUNT(*) |
+---------------+----------+
| 办公用品      |        2 |
| 厨房用具      |        4 |
| 衣服          |        2 |
+---------------+----------+

GOOUP BY 就像切分表的一把刀。

子句的书写顺序:

SELECTàFROMàWHEREàGROUP BY

SQL子句的顺序不能改变,也不能互相替换。

SELECT shiire_tanka, COUNT(*)
  FROM Shohin
 GROUP BY shiire_tanka;

+--------------+----------+
| shiire_tanka | COUNT(*) |
+--------------+----------+
|         NULL |        2 |
|          320 |        1 |
|          500 |        1 |
|          790 |        1 |
|         2800 |        2 |
|         5000 |        1 |
+--------------+----------+

 

聚合键中包含NULL时,在结果中会以“不确定”行(空行)的形式表现出来。

GROUP BY 和WHERE并用时, SELECT语句的执行顺序如下:

FROM---WHERE---GROUP BY---SELECT

使用聚合函数时,SELECT字句中只能存在以下三种元素:

  • 常数
  • 聚合函数
  • GROUP BY字句中指定的列明(也就是聚合键)

GROUP BY子句中不能够使用SELECT子句中定义的别名。

因为SELECT子句在GROUP BY子句之后执行。

GROUP BY子句结果的显示是无序的。

只有SELECT和HAVING子句(以及ORDER BY字句)中能够使用聚合函数。

为聚合函数结果指定条件

HAVING子句:

SELECT <列名1>, <列名2>, <列名3>, …

FROM <表名>

GROUP BY <列名1>, <列名2>, <列名3>, …

HAVING <分组结果对应的条件>

使用HAVING子句时SELECT语句的顺序:

SELECT---FROM---WHERE---GROUP BY---HAVING

HAVING子句要写在GROUP BY子句之后,在DBMS内部的执行顺序也排在GROUP BY子句之后。

SELECT shohin_bunrui, COUNT(*)
  FROM Shohin
 GROUP BY shohin_bunrui
HAVING COUNT(*) = 2;

in_bunrui | COUNT(*) |
+---------------+----------+
| 办公用品      |        2 |
| 衣服          |        2 |
+---------------+----------+

SELECT shohin_bunrui, AVG(hanbai_tanka)
  FROM Shohin
 GROUP BY shohin_bunrui
HAVING AVG(hanbai_tanka) >= 2500;

ohin_bunrui | AVG(hanbai_tanka) |
+---------------+-------------------+
| 厨房用具      |         2795.0000 |
| 衣服          |         2500.0000 |
+---------------+-------------------+

 

HAVING字句中能够使用的3种要素如下:

  • 常数
  • 聚合函数
  • GROUP BY子句中指定的列名(即聚合键)

WHERE子句 = 指定行所对应的条件

HAVING子句 = 指定组所对应的条件

对查询结构进行排序

ORDER BY子句:

SELECT <列名1>, <列名2>, <列名3>, …

FROM <表名>

ORDER BY <排序基准列1>, <排序基准列1>,…

不论何种情况,ORDER BY子句都需要写在SELECT语句的末尾。这是因为对数据进行排序的操作必须在结果即将返回时执行。

子句的书写顺序:

SELECT---FROM---WHERE---GROUP BY ---HAVING---ORDER BY

未指定ORDER BY子句中排序时会默认使用升序进行排序。ASC升序,DESC降序。

排序键中包含NULL时,会在开头或末尾进行汇总。(MySQL中,升序会在开头汇总,降序会在末尾汇总)

使用HAVING子句时SELECT语句的执行顺序:

FROM---WHERE---GROUP BY---HAVING---SELECT---ORDER BY

SELECT子句的执行顺序在GROUP BY子句之后,ORDER BY子句之前。因此在执行GROUP BY子句时,SELECT语句中定义的别名无法别识别。对于SELECT子句之后执行GROUP BY子句来说,就没有这样的问题了。

在ORDER BY子句中可以使用SELECT子句中为使用的列和聚合函数.

SELECT shohin_mei, hanbai_tanka, shiire_tanka
  FROM Shohin
ORDER BY shohin_id;

+------------+--------------+--------------+
| shohin_mei | hanbai_tanka | shiire_tanka |
+------------+--------------+--------------+
| T恤        |         1000 |          500 |
| 打孔器     |          500 |          320 |
| 运动T恤    |         4000 |         2800 |
| 菜刀       |         3000 |         2800 |
| 高压锅     |         6800 |         5000 |
| 叉子       |          500 |         NULL |
| 擦菜板     |          880 |          790 |
| 圆珠笔     |          100 |         NULL |
+------------+--------------+--------------+

SELECT shohin_bunrui, COUNT(*)
  FROM Shohin
 GROUP BY shohin_bunrui
ORDER BY COUNT(*);

+---------------+----------+
| shohin_bunrui | COUNT(*) |
+---------------+----------+
| 办公用品      |        2 |
| 衣服          |        2 |
| 厨房用具      |        4 |
+---------------+----------+

  

 

 

时间: 2024-10-14 05:12:02

SQL --Chater03 聚合与排序的相关文章

[SQL] SQL 基础知识梳理(三)- 聚合和排序

SQL 基础知识梳理(三)- 聚合和排序 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5926689.html 目录 一.对表进行聚合查询 1.聚合函数 (1)5 个常用函数: ①COUNT:计算表中的记录(行)数. ②SUM:计算表中数值列的数据合计值. ③AVG:计算表中数值列的数据平均值. ④MAX:求出表中任意列中数据的最大值. ⑤MIN:求出表中任意列中数据的最小值. (2)聚合:将多行汇总成一行. 图1-1 Shohin 表 2.计算

SQL基础教程(第2版)第3章 聚合与排序:3-1 对表进行聚合查询

聚合函数 COUNT: 计算表中的记录数(行数)SUM: 计算表中数值列中数据的合计值AVG: 计算表中数值列中数据的平均值MAX: 求出表中任意列中数据的最大值MIN: 求出表中任意列中数据的最小值 计算NULL之外的数据的行数 该特性是 COUNT 函数所特有的,其他函数并不能将星号作为参数(如果使用星号会出错).  计算合计值 对于 SUM 函数来说,即使包含 NULL,也可以计算出合计值. 计算平均值 使用聚合函数删除重复值(关键字DISTINCT) SQL基础教程(第2版)第3章 聚合

SQL基础教程(第2版)第3章 聚合与排序:3-3 为聚合结果指定条件

HAVING子句 HAVING子句的构成要素 笔者认为,聚合键所对应的条件还是应该书写在 WHERE 子句之中.理由有两个.首先,根本原因是 WHERE 子句和 HAVING 子句的作用不同.如前所述, HAVING 子句是用来指定“组”的条件的.因此,“行”所对应的条件还是应该写在 WHERE 子句当中.这样一来,书写出的 SELECT 语句不但可以分清两者各自的功能,理解起来也更加容易. WHERE 子句 = 指定行所对应的条件HAVING 子句 = 指定组所对应的条件其次,对初学者来说,研

SQL Server 聚合函数算法优化技巧

Sql server聚合函数在实际工作中应对各种需求使用的还是很广泛的,对于聚合函数的优化自然也就成为了一个重点,一个程序优化的好不好直接决定了这个程序的声明周期.Sql server聚合函数对一组值执行计算并返回单一的值.聚合函数对一组值执行计算,并返回单个值.除了 COUNT 以外,聚合函数都会忽略空值. 聚合函数经常与 SELECT 语句的 GROUP BY 子句一起使用. v1.写在前面 如果有对Sql server聚合函数不熟或者忘记了的可以看我之前的一片博客.sql server 基

3 聚合与排序

3 聚合与排序 3-1 对表进行聚合查询 聚合函数 通过SQL对数据进行 操作或计算时需要使用函数. 计算表中全部数据行数时,可以使用COUNT函数. COUNT : 计算表中的记录数(行数). SUM : 计算表中数值列的数据合计值. AVG : 计算表中数值列的数据平均值. MAX :计算表中任意列中数据的最大值. MIN :计算表中任意列中数据的最小值. 如上所示,用于合计的函数称为聚合函数或者集合函数.本书中统称为聚合函数.所谓聚合,就是将多行汇总为一行. 函数这个词,与我们在学校课上学

sql 按指定规则排序,例如 按 1,3,2排序 而不是1,2,3

我们都知道 sql语句中的排序有desc(降序).asc(升序),这两个都是按顺序排列的,最近有一个需求是不按顺序排序了 ,抽出个别的排在前面,并且这种需求是应对的问题中的数据是比较少的,而且没有规律可循,用程序处理的话虽然能实现,但是处理起来会复杂很多,下面我们就通过对order by 后面的排序语句进行处理达到我们想要的目的 在Company表中存储有id,Name(公司名称)等字段,其中id为自增 主键 首先我们按顺序查出前三条记录(默认升序,其中order by id ASC 可省略)

SQL你必须知道的-查询聚合分组排序

use MySchoolTwo    -- 简单查询    select * from Student    -- 话说这种查询的效率要比 * 要高级点    select sId , sName , sAge , sNo , sBirthday , sClassId , sSex from Student    select sName from student    -- 给列改名三种方式    select sName as '' 姓名'' , sAge as '' 年龄 '', sNo

SQL server 模糊查询 排序 聚合函数 数学函数 字符串函数 时间日期函数 转换、函数转换

create database lianxi831  --创建数据库gouse lianxi831  --引用数据库gocreate table xs  --插入表格( code int not null,  --写入内容 name varchar(10), cid varchar(18), banji varchar(10), yufen decimal(18,2), shufen decimal(18,2), yingfen decimal(18,2),)goinsert into xs v

SQL基础教程(第2版)第3章 聚合与排序:3-2 对表进行分组

GROUP BY子句 这样, GROUP BY 子句就像切蛋糕那样将表进行了分组.在 GROUPBY 子句中指定的列称为聚合键或者分组列.由于能够决定表的切分方式,所以是非常重要的列.当然, GROUP BY 子句也和 SELECT 子句一样,可以通过逗号分隔指定多列. 聚合键中包含NULL的情况 使用WHERE子句时GROUP BY的执行结果 与聚合函数和GROUP BY子句有关的常见错误 ■常见错误① ——在SELECT子句中书写了多余的列 ■常见错误② ——在GROUP BY子句中写了列的