聚合函数与SQL排序
聚合查询
通过SQL对数据进行某种操作或计算时需要使用函数(聚合函数,将多行汇为一行)。
常用函数(5个):
- COUNT:计算表中的记录数(行数)
- SUM: 计算表中数值列中数据的合计值
- AVG: 计算表中数值列中数据的平均值
- MAX: 计算表中数值列中数据的最大值
- MIN: 计算表中数值列中数据的最小值
COUNT()函数
-- 1.计算全部行数:
SELECT COUNT(*) FROM Product;
-- 2.计算null之外的数据的行数(将对象列设为参数):
SELECT COUNT(purchase_price) FROM Product;
-- 3.将包含null的列作为参数时,count(*)和count(<列名>)的结果不一样
SELECT COUNT(*), COUNT(purchase_price) FROM Product;
SUM:计算合计值
-- 1.计算单列合计值
SELECT SUM(sale_price) FROM Product;
-- 2.计算多列合计值
SELECT SUM(sale_price), SUM(purchase_price) FROM Product;
AVG:计算平均值
-- 1.计算某列平均值(如果该列存在null,则会被删除后再计算)
SELECT AVG(sale_price) FROM Product;
MAX和MIN:计算最大值和最小值
注:MAX/MIN使用于任何数据类型,只要能排序,就存在最大值和最小值
-- 1.计算销售值的最大值和最小值
SELECT MAX(sale_price),MIN(purchase_price) FROM Product;
-- 2.计算日期的最大值和最小值
SELECT MAX(regist_date), MIN(regist_date) FROM Product;
注:MAX/MIN使用于任何数据类型,SUM/AVG只适用于数值类型的列。
使用聚合函数删除重复值(先去除重复行,再计算; AVG也可使用)
SELECT COUNT(DISTINCT product_type) FROM Product;
分组(GROUP BY)
-- 1.商品种类分组计算各组数量(GROUP BY指定的列被称为聚合列或分组列):
SELECT product_type, COUNT(*)
FROM Product
GROUP BY product_type;
-- 2.聚合键包含空值情况(空值也被当成一组):
SELECT purchase_price, COUNT(*)
FROM Product
GROUP BY purchase_price;
-- 3.同时使用where和GROUP BY子句
SELECT purchase_price, COUNT(*)
FROM Product
WHERE product_type = '衣服'
GROUP BY purchase_price;
注:
- 使用group by时,select子句不能出现聚合键之外的列名。
- 使用group by时,不能使用select子句中定义的列的别名。主要是sqld的执行顺序,先执行group by再执行select。
- 使用group by 时,不能在where子句中使用聚合函数,只有select子句和having子句及group by子句中能够使用聚合函数
如:
SELECT product_type, COUNT(*)
ROM Product
WHERE COUNT(*) = 2
GROUP BY product_type
> 1111 - Invalid use of group function
> 时间: 0s
为集合结果指定条件
注:HAVING子句中能够使用三种要素:常数,聚合函数,GROUP BY子句中指定的列名(聚合建)
HAVING子句:
- 用having就一定要和group by连用
- 用group by不一有having (它只是一个筛选条件用的)
-- 1.分组,商品品种分组后结果中筛选出数据行数为2行的数据
SELECT product_type, COUNT(*)
FROM Product
GROUP BY product_type
HAVING COUNT(*) = 2;
-- 2.平均数,销售价格大于2500的
SELECT product_type, AVG(sale_price)
FROM Product
GROUP BY product_type
HAVING AVG(sale_price) >= 2500;
相对于HAVING子句,更适合写再Where子句中的条件:
- where子句 = 指定行所对应的条件
- having子句 = 指定组所对应的条件
- 聚合建所对应的条件不应该书写在HAVING子句中,而应书写在WHERE子句当中。
- 虽执行结果一样,单更推荐第二种写法,将条件写在where子句中比写在having子句中的处理速度更快,返回结果时间更短。
- 原因:聚合操作时,DBMS内部会进行排序处理,where在排序之前就对数据进行过滤,having是在排序之后在对数据进行分组。
SELECT product_type, COUNT(*)
FROM Product
GROUP BY product_type
HAVING product_type = '衣服';
SELECT product_type, COUNT(*)
FROM Product
WHERE product_type = '衣服'
GROUP BY product_type;
对结果进行排序
- 升序:ASC(不写默认)
- 降序:DESC
select的排序顺序是随机的,通常在句尾添加ORDER BY(排序建)子句来明确排序。
注:子句书写顺序:select - from - where - group by - having - order by
-- 1.销售价格升序:未指定GROUP BY子句中排列顺序默认为升序。
SELECT product_id, product_name, sale_price, purchase_price
FROM Product
ORDER BY sale_price;
-- 2.销售价格降序(DESC关键字)
SELECT product_id, product_name, sale_price, purchase_price
FROM Product
ORDER BY sale_price DESC;
-- 3.指定多个排序的键
SELECT product_id, product_name, sale_price, purchase_price
FROM Product
ORDER BY sale_price, product_id;
注:1.优先使用左侧的键,如果存在相同值则使用右侧。2.排序键包含null时,会在开头或者末尾进行汇总。
-- 4.在排序键中使用显示用的别名
SELECT product_id AS id, product_name, sale_price AS sp, purchase_price
FROM Product
ORDER BY sp, id;
-- 5.ORDER BY子句可以使用聚合函数
SELECT product_type, COUNT(*)
FROM Product
GROUP BY product_type
ORDER BY COUNT(*);
聚合函数与SQL排序的更多相关文章
- PCB MS CLR 聚合函数 joinString加排序实现
准备着手,动态列SQL查询,要实现动态列SQL,会运用到聚合函数,而SQL本身聚合函数有限, 无满足此用户任意字段组合变化,再加上工艺流程重复相同工序,如;沉铜1,沉铜2对应工序代码都是相同的 而通常 ...
- Hibernate的批量查询——Criteria查询所有、条件、分页、统计(聚合函数)、排序
1.查询所有的学生信息: public static void testSel() { Session session = HibernateUtils.openSession(); Transact ...
- SQL语句汇总(三)——聚合函数、分组、子查询及组合查询
聚合函数: SQL中提供的聚合函数可以用来统计.求和.求最值等等. 分类: –COUNT:统计行数量 –SUM:获取单个列的合计值 –AVG:计算某个列的平均值 –MAX:计算列的最大值 –MIN:计 ...
- SQL 必知必会·笔记<7>汇总数据——使用聚合函数
有时候我们需要对表中的数据进行汇总,而不需要数据本身,为了方便这些类型的检索,SQL给出了5个聚合函数,SQL聚合函数在各主要的SQL实现中得到了相当一致的支持.如下: 1.1 AVG()函数 AVG ...
- SQL语句汇总(三)——聚合函数、分组、子查询及组合查询
拖了一个星期,终于开始写第三篇了.走起! 聚合函数: SQL中提供的聚合函数可以用来统计.求和.求最值等等. 分类: –COUNT:统计行数量 –SUM:获取单个列的合计值 –AVG:计算某个列的平均 ...
- 第16课-数据库开发及ado.net-数据库SQl,创建数据库和表,增删改语句,约束,top和Distinct,聚合函数介绍
第16课-数据库开发及ado.net 数据库SQl,创建数据库和表,增删改语句,约束,top和Distinct,聚合函数介绍 SQL语句入门(脚本.命令) SQL全名是结构化查询语言(Structur ...
- SQL之开窗函数详解--可代替聚合函数使用
在没学习开窗函数之前,我们都知道,用了分组之后,查询字段就只能是分组字段和聚合的字段,这带来了极大的不方便,有时我们查询时需要分组,又需要查询不分组的字段,每次都要又到子查询,这样显得sql语句复杂难 ...
- 【SQL】CLR聚合函数什么鬼
之前写过一个合并字符串的CLR聚合函数,基本是照抄MS的示例,外加了一些处理,已经投入使用很长时间,没什么问题也就没怎么研究,近日想改造一下,遇到一些问题,遂捣鼓一番,有些心得,记录如下. 一.杂项 ...
- Oracle 聚合函数
聚合函数: SQL中提供的聚合函数可以用来统计.求和.求最值等等. 此处采用Oracle 11g中其他用户SCOTT中的EMP表,进行演示. –COUNT:统计行数量 COUNT(*)统计的是结果集的 ...
随机推荐
- printf 打印字符串的任意一部分
使用printf()函数打印字符串的任意部分,请看下例: <span style="font-size:16px;">#include <stdio.h> ...
- nyoj_289_苹果_20140307
苹果 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 ctest有n个苹果,要将它放入容量为v的背包.给出第i个苹果的大小和价钱,求出能放入背包的苹果的总价钱最大值. ...
- 【ACM】 hdu_1090_A+BII_201307261100
A+B for Input-Output Practice (II)Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/3276 ...
- MSSQL的表备份成INSERT脚本的存储过程
USE [SupplyChain]GO/****** Object: StoredProcedure [dbo].[ExpData] Script Date: 2015-12-18 10:23:08 ...
- [数据结构与算法]排序算法(Python)
1.直接插入排序 给定一个数组后,从第二个元素开始,如果比第一个小,就跟他交换位置,否则不动:第三个元素如果比第二个小,把第三个跟第二个交换位置,在把第二个与第一个比较:..... def inser ...
- JS 缓冲运动 带运动的留言本 小案例
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...
- linux下环境变量C_INCLUDE_PATH
环境变量定义一般都是/etc/profile文件(对所有用户有效),或者在Home目录下的.bashrc或.profile(只对当前用户有效)一般系统安装了编译工具之后无需设置这些变量编译都不会出现问 ...
- stl变易算法(三)
本篇接着前面stl变易算法(一)和stl变易算法(二)继续讲述变易算法. 这里将介绍完余下的变易算法,主要有:填充fill.n次填充fill_n.随机生成元素generate.随机生成n个元素gene ...
- 查询结果多个合并一个GROUP_CONCAT(EmployeeName)
一个课程多个教师,查询结果单条显示,其中课程与教师关系是一一对应存入表中
- Python基础--正則表達式基本的语法以及re模块
正则是个非常牛逼的东西,python中当然也不会缺少. 所以今天的Python就跟大家一起讨论一下python中的re模块. re模块包括对正則表達式的支持. 什么是正则: 正則表達式是能够匹配文本片 ...