聚合函数是对一组值执行计算并返回单一的值的函数,它常常与SELECT语句的GROUP BY子句一同使用sql
咱们 每一个订单 都须要对应一个 订单的类型 同时 订单 能够有多个 货品express
执行一下语句 建立基本测试需求函数
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 返回指定组中项目的数量(咱们 求 采购单 订单包含的商品数量)spa
若是 expr 标识多个字段,那么 Count 函数仅统计至少有一个字段为非 Null 值的记录。若是全部指定字段均为 Null值,那么该记录不被统计在内。能够使用 & 号分隔字段名。下面的示例显示了如何将计算限于那些 ShippedDate 或 Freight 为非 Null 值的记录:code
SELECT Count('ShippedDate & Freight') AS [Not Null] FROM Orders;
对象
能够在查询表达式中使用 Count。也能够将该表达式用于 QueryDef 对象的 SQL 属性中,或者在基于 SQL 查询建立 Recordset 对象时使用该表达式。blog
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