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