13.3 使用带聚集函数的联结
如第9课所述,聚集函数用来汇总数据。虽然至今为止我们举的聚集函数的例子都只是从一个表中汇总数据,但这些函数也可以与联结一起使用。
我们来看个例子,要检索所有顾客及每个顾客所下的订单数,下面的代码使用COUNT()函数完成此工作:
输入▼
SELECT Customers.cust_id,COUNT(Orders.order_num) AS num_ordFROM Customers INNER JOIN OrdersON Customers.cust_id = Orders.cust_idGROUP BY Customers.cust_id;
输出▼
cust_id um_ord---------- --------1000000001 21000000003 11000000004 11000000005 1
分析▼
这条SELECT语句使用INNER JOIN将Customers和Orders表互相关联。GROUP BY子句按顾客分组数据,因此,函数调用COUNT(Orders.order_num)对每个顾客的订单计数,将它作为num_ord返回。
聚集函数也可以方便地与其他联结一起使用。请看下面的例子:
输入▼
SELECT Customers.cust_id,COUNT(Orders.order_num) AS num_ordFROM Customers LEFT OUTER JOIN OrdersON Customers.cust_id = Orders.cust_idGROUP BY Customers.cust_id;
提示:Oracle中没有
AS
再次提醒Oracle用户,请记住删除AS。
输出▼
cust_id num_ord---------- -------1000000001 21000000002 01000000003 11000000004 11000000005 1
分析▼
这个例子使用左外部联结来包含所有顾客,甚至包含那些没有任何订单的顾客。结果中也包含了顾客1000000002,他有0个订单。
