无法理解 SQL 代码



我发现很难理解下面的代码。你能给我一个代码如何工作的逻辑流程吗?

问题——假设您要在"客户"表中显示每个客户下达的订单总数。订单与相应的客户 ID 一起存储在"订单"表中。

步骤——

  1. 从"客户"表中检索客户列表。
  2. 对于检索到的每个客户,计算"订单"表中关联订单的数量。

解决方案——

SELECT cust_name, cust_state, 
    (SELECT COUNT(*)
        FROM Orders
        WHERE Orders.cust_id = Customers.cust_id
    )
AS order_nos
FROM Customers
ORDER BY cust_name

我无法理解括号内的count(*)部分。请帮我弄清楚。

谢谢。

它只是计算行数。 在这种情况下,这是每个客户的订单数。 替代 COUNT(column_name) 为您提供column_name不为 null 的行数。

等效的没有子查询(改用组):

SELECT cust_name, cust_state, COUNT(orders.cust_id) order_nos
FROM Customers
    LEFT OUTER JOIN Orders on Customers.cust_id = Orders.cust_id
GROUP BY cust_name, cust_state
ORDER BY cust_name

被称为相关子查询。 从本质上讲,对于每个客户,您将了解该客户有多少订单。"魔术"位于子查询的 WHERE Orders.cust_id = Customers.cust_id 子句中。这是将此结果与主查询相关联的部分。它说"从主查询中获取cust_id,现在找到cust_id cust_id的订单计数"。

相关内容

  • 没有找到相关文章

最新更新