SQL 正在子查询中检索筛选值

SQL retrieving filtered value in subquery

在这个cust_id中是一个外键和ordsreturns每个客户的订单数

SELECT cust_name, (
    SELECT COUNT(*)
    FROM Orders
    WHERE Orders.cust_id = Customers.cust_id
) AS ords
FROM Customers

输出是正确的,但我想过滤它以仅检索订单数量少于给定数量的客户,我不知道如何过滤子查询 ords ,我在代码末尾尝试了 WHERE ords < 2 但它不起作用,我尝试在 cust_id 比较之后添加 AND COUNT(*)<2 但它不起作用。我正在使用 MySQL

使用 HAVING 子句(并使用连接而不是子查询)....

SELECT Customers.cust_id, Customers.cust_name, COUNT(*) ords
FROM Orders, Customers 
WHERE Orders.cust_id = Customers.cust_id
GROUP BY 1,2
HAVING COUNT(*)<2

如果您想要包含订单为零的人,请将联接更改为外部联接。

这里不需要相关子查询,因为它会计算每一行的值,而不会提供 "good" 性能。更好的方法是使用带有连接、分组依据和 having 子句的常规查询来将您的条件应用于组。

由于您的条件是 return 只有少于 2 个订单的客户,left join 而不是 inner join 是合适的。它也会 return 没有订单的客户(计数为 0)。

select
  cust_name, count(*)
from
  customers c
  left join orders o on c.cust_id = o.cust_id
group by cust_name
having count(*) < 2