13.3 使用带聚集函数的联结

如第9课所述,聚集函数用来汇总数据。虽然至今为止我们举的聚集函数的例子都只是从一个表中汇总数据,但这些函数也可以与联结一起使用。

我们来看个例子,要检索所有顾客及每个顾客所下的订单数,下面的代码使用COUNT()函数完成此工作:

输入▼

  1. SELECT Customers.cust_id,
  2. COUNT(Orders.order_num) AS num_ord
  3. FROM Customers INNER JOIN Orders
  4. ON Customers.cust_id = Orders.cust_id
  5. GROUP BY Customers.cust_id;

输出▼

  1. cust_id um_ord
  2. ---------- --------
  3. 1000000001 2
  4. 1000000003 1
  5. 1000000004 1
  6. 1000000005 1

分析▼

这条SELECT语句使用INNER JOINCustomersOrders表互相关联。GROUP BY子句按顾客分组数据,因此,函数调用COUNT(Orders.order_num)对每个顾客的订单计数,将它作为num_ord返回。

聚集函数也可以方便地与其他联结一起使用。请看下面的例子:

输入▼

  1. SELECT Customers.cust_id,
  2. COUNT(Orders.order_num) AS num_ord
  3. FROM Customers LEFT OUTER JOIN Orders
  4. ON Customers.cust_id = Orders.cust_id
  5. GROUP BY Customers.cust_id;

提示:Oracle中没有AS
再次提醒Oracle用户,请记住删除AS

输出▼

  1. cust_id num_ord
  2. ---------- -------
  3. 1000000001 2
  4. 1000000002 0
  5. 1000000003 1
  6. 1000000004 1
  7. 1000000005 1

分析▼

这个例子使用左外部联结来包含所有顾客,甚至包含那些没有任何订单的顾客。结果中也包含了顾客1000000002,他有0个订单。