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
在这个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