聚集函数用于汇总数据,通常用于从一个表中计算统计信息,但也可以与联结一起使用。以下是一个例子,展示如何使用聚集函数统计每个顾客的订单数。
示例 1:使用 COUNT()
函数与 INNER JOIN
假设我们需要检索所有顾客及每个顾客所下的订单数,以下 SQL 查询使用 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 num_ord
---------- --------
1000000001 2
1000000003 1
1000000004 1
1000000005 1
分析:
该查询使用 INNER JOIN
将 Customers
和 Orders
表连接,GROUP BY
子句根据顾客ID对数据进行分组。COUNT(Orders.order_num)
聚合函数统计每个顾客的订单数量,并将其作为 num_ord
返回。
示例 2:使用 COUNT()
函数与 LEFT OUTER JOIN
聚集函数也可以与其他类型的联结结合使用,下面是一个使用左外部联结 (LEFT OUTER JOIN
) 的例子,展示如何包含没有订单的顾客:
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;
输出:
cust_id num_ord
---------- --------
1000000001 2
1000000002 0
1000000003 1
1000000004 1
1000000005 1
分析:
此查询使用 LEFT OUTER JOIN
,它会返回所有顾客的数据,包括那些没有任何订单的顾客(如顾客 1000000002
)。与 INNER JOIN
不同,使用外部联结时,未匹配的订单数量将显示为 0
。
总结
- 聚集函数(如
COUNT()
)通常用于计算数据的汇总值,可以结合不同类型的联结来获取更全面的信息。 INNER JOIN
仅返回在两个表中都有匹配项的记录,适用于需要排除没有相关数据的情况。LEFT OUTER JOIN
返回左表中的所有记录,即使右表中没有匹配项,也会显示为NULL
或0
,适用于需要包含所有记录的情况。
通过掌握聚集函数与联结的结合使用,您可以高效地从多个表中提取和汇总数据,以满足更复杂的查询需求。