文档章节

sql 聚合函数 测试实验笔记

dong.li
 dong.li
发布于 2012/04/19 12:58
字数 1146
阅读 139
收藏 2

聚合函数是对一组值执行计算并返回单一的值的函数,它经常与SELECT语句的GROUP BY子句一同使用

我们 每个订单 都需要对应一个 订单的类型 同时  订单 可以有多个 货品

执行一下语句 创建基本测试需求

DROP TABLE IF EXISTS my_order_item;
DROP TABLE IF EXISTS my_item;
DROP TABLE IF EXISTS my_order;
DROP TABLE IF EXISTS order_type;


-- 创建订单类型
create TABLE order_type(
	id int primary key auto_increment,
	name char(20)
);

-- 创建订单
create TABLE my_order(
	id int primary key auto_increment,
	order_type_id INT,
	FOREIGN KEY keyOrderTYpe (order_type_id) REFERENCES order_type(id)
);


-- 创建商品

create TABLE my_item(
	id int primary key auto_increment,
	name char(20),
	price INT
);

-- 创建订单 与 商品关系维护
create TABLE my_order_item(
	id int primary key auto_increment,
	my_item_id INT,
	my_order_id INT,
	FOREIGN KEY keyOrderItem (my_item_id) REFERENCES my_item(id),
	FOREIGN KEY keyOrderId (my_order_id) REFERENCES my_order(id)
);


-- 插入订单类型
INSERT INTO order_type VALUES (null,"退货单");
INSERT INTO order_type VALUES (null,"采购单");
INSERT INTO order_type VALUES (null,"销售出库单");

-- 插入 测试 商品
INSERT INTO my_item VALUES (null,"跑步机",8880);
INSERT INTO my_item VALUES (null,"电视机",6080);
INSERT INTO my_item VALUES (null,"洗衣机",3400);
INSERT INTO my_item VALUES (null,"电烤炉",800);

-- 插入一些订单
INSERT INTO my_order VALUES (null,2);
INSERT INTO my_order VALUES (null,2);
INSERT INTO my_order VALUES (null,3);

-- 插入订单 商品

INSERT INTO my_order_item VALUES (null,1,1);
INSERT INTO my_order_item VALUES (null,2,2);
INSERT INTO my_order_item VALUES (null,2,1);
INSERT INTO my_order_item VALUES (null,4,1);
INSERT INTO my_order_item VALUES (null,3,1);
INSERT INTO my_order_item VALUES (null,1,2);

1. AVG  返回指定组中的平均值,空值被忽略。(我们 求 采购单 订单 商品的平均价格 )

    • Avg 函数

    • 计算在查询的指定字段中所包含的一组值的算术平均值。
    • 语法
    •     Avg(expr)
    •         expr 占位符代表一个字符串表达式,它标识的字段包含被计算平均值的数据,或者代表使用该字段的数据执行计算的表达式。expr 中的操作数可包括表字段名、常量名或函数名(可以是固有的或用户自定义的函数,但不能是其他 SQL 聚合函数)。
    •     说明
    • 在计算中,Avg 函数不能包含任何Null字段。
    • 您可以将 Avg 用于查询表达式中和QueryDef对象的SQL属性中,或者在基于 SQL 查询创建Recordset对象时使用。

SELECT ord.id AS "订单ID",AVG(itm.price) AS "订单商品平均价格" FROM order_type type 
	LEFT JOIN my_order ord ON (type.id = ord.order_type_id ) 
	LEFT JOIN my_order_item ordItem ON (ord.id = ordItem.my_order_id)
	LEFT JOIN my_item itm ON (ordItem.my_item_id = itm.id)
  WHERE type.name = '采购单' GROUP BY ord.id DESC

AVG 平均函数


2. COUNT  返回指定组中项目的数量(我们 求 采购单 订单包含的商品数量)

    • 计算查询所返回的记录数
    • 语法
    • Count(expr)
    • expr 占位符代表字符串表达式,它标识的字段包含了要统计的数据,或者是使用该字段的数据执行计算的表达式。expr 中的操作数可包括表字段名或函数名(可以是固有的或者用户定义的函数,但不能是其他 SQL 聚合函数)。可以统计包括文本在内的任何类型数据。
    • 说明
    • 可以使用 Count 来统计基本查询的记录数。例如,可以通过 Count 来统计已发往特定国家/地区的订单数。
    • 尽管 expr 能够对字段执行计算,但是 Count 仅仅计算出记录的数目。记录中所存储的数值类型与计算无关。
    • Count 函数不统计包含Null字段的记录,除非 expr 是星号 (*)通配符。如果使用了星号通配符,Count 会计算出包括包含 Null 字段在内的所有记录的数目。使用 Count(*) 方式比使用 Count([Column Name])方式快很多。不要用单引号 (' ') 将星号括起来。下面的示例计算 Orders 表中的记录数目。
    • SELECT Count(*) AS TotalOrders FROM Orders;
    • 如果 expr 标识多个字段,那么 Count 函数仅统计至少有一个字段为非 Null 值的记录。如果所有指定字段均为 Null值,那么该记录不被统计在内。可以使用 & 号分隔字段名。下面的示例显示了如何将计算限于那些 ShippedDate 或 Freight 为非 Null 值的记录:

      SELECT Count('ShippedDate & Freight') AS [Not Null] FROM Orders;

      可以在查询表达式中使用 Count。也可以将该表达式用于 QueryDef 对象的 SQL 属性中,或者在基于 SQL 查询创建 Recordset 对象时使用该表达式。

SELECT ord.id AS "订单ID",COUNT(*) AS "订单包含的商品数量" FROM order_type type 
	LEFT JOIN my_order ord ON (type.id = ord.order_type_id ) 
	LEFT JOIN my_order_item ordItem ON (ord.id = ordItem.my_order_id)
	LEFT JOIN my_item itm ON (ordItem.my_item_id = itm.id)
  WHERE type.name = '采购单' GROUP BY ord.id DESC

Count 函数

© 著作权归作者所有

上一篇: hibernate三态
下一篇: 验证码实现
dong.li
粉丝 7
博文 31
码字总数 12205
作品 0
绵阳
私信 提问
加载中

评论(1)

Credo-Zhao
Credo-Zhao
一般用是count(1)和count(*)吧,count("列名")和count(1)这样的应该是属于一种.我没用过这种.
count(1)比count(*)还是要快那么一点点的.count(*)需要判断选用那列进行最优计算.

如果null参与聚集运算,则除count(*)之外其它聚集函数都忽略null.所以我觉得还是count(*)好点.
Over:窗口函数(滑动聚合)

Over 窗口函数在Select 子句中,对查询的结果集进行“滑动-聚合”运算;如果使用count,那么基于滑动窗口的聚合语义同 base+1 累加;如果使用sum,那么基于滑动窗口的聚合语义等同于数据累加...

长征6号
2016/07/18
0
0
Oracle group by 用法实例详解

1. Group by的语法 Select [filed1,fild2,]聚合函数(filed), [Grouping(filed),] [Grouping_id(filed1,filed2,…)] From tablename Where condition [Group by {rollup|cube}(filed,filed......

rudy_gao
2013/10/25
0
0
sharding-jdbc源码学习笔记(四)----并发执行和结果归并

一,并发执行sql问题,多库同时并发,提高效率。 如果是执行单条sql,在当前线程执行; 如果是执行多条sql在不同的库中或者同一个库中多个表里面,当前线程执行第一条sql,使用线程池执行其他...

PageYi
2017/10/25
91
0
Esper学习笔记五:EPL语法(3)

1.Aggregation 类似于SQL中的聚合函数,EPL中聚合函数格式如下: aggregate_function就是聚合函数的名字,比如avg,sum等。expression通常是事件流的某个属性,也可以是不同事件流的多个属性...

贾峰uk
2018/09/03
58
0
TSQL 聚合函数忽略NULL值

max,min,sum,avg聚合函数会忽略null值,但不代表聚合函数不返回null值,如果表为空表,或聚合列都是null,则返回null。count 聚合函数忽略null值,如果聚合列都是null或表为空表,则返回0。 ...

长征6号
2016/09/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

实现线程类的两种方式

一、让目标类继承Thread类 package com.atzhongruan.springboot_boostrap.Test;/** * @Author jose * date 2019 */public class Task1 extends Thread{ @Override pub......

zhengzhixiang
15分钟前
2
0
OSChina 周日乱弹 —— 然而并不能,他是公的。

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @小小编辑推荐:《兔子姑娘》- 陈老实 《兔子姑娘》- 陈老实 手机党少年们想听歌,请使劲儿戳(这里) @曼尼22 :我倒要看看我头发啥时候掉完...

小小编辑
21分钟前
17
4
QML学习之浅谈Window

转载地址:http://blog.csdn.net/kanchuan1905/article/details/53762788 在Qt Quick的世界里,Window对象用于创建一个与操作系统相关的顶层窗口,包含了如Text, Rectangle, Image等元素。W...

shzwork
44分钟前
6
0
centos 查看删除旧内核

1、查看系统中安装的内核 $ yum list installed | grep kernel 2、删除系统中旧内核 $ yum install yum-utils$ package-cleanup --oldkernels --count=2...

编程老陆
今天
10
0
ES6

ES6:不改变原理的基础上,让API变得更简单 一、let:代替var用于声明变量 1、var的缺点: (1)声明提前 (2)没有块级作用域 2、let的优点: (1)组织了申明提前 (2)让let所在的块({}),...

wytao1995
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部