聚合函数是对一组值执行计算并返回单一的值的函数,它经常与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 返回指定组中的平均值,空值被忽略。(我们 求 采购单 订单 商品的平均价格 )
|
|
|
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
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
来源:oschina
链接:https://my.oschina.net/u/242053/blog/54322