我知道之前已经问过类似这样的问题,但是我没有看过超过2张表。似乎有所不同。
我有三个表格,我需要字段,customers
我需要customerID
和orderID
来自orders
,customerID
和orderID
{1}}和lineitems
我从中获得orderID
和quantity
(=订购数量)。
我想知道有多少客户购买了超过2件相同的商品,所以基本上数量> 2用:
SELECT COUNT(DISTINCT custID)
FROM customers
WHERE EXISTS(
SELECT *
FROM customers C, orders O, lineitems L
WHERE C.custID = O.custID AND O.orderID = L.orderID AND L.quantity > 2
);
我不明白为什么它会返回所有行的计数。我在检查> 2条件之前关联子查询,不是吗?
我是SQL的初学者,所以如果你能在必要时从根本上向我解释,我会感激不尽。感谢。
答案 0 :(得分:2)
您不必在customers
子查询中重复EXISTS
表。这是相关的概念:使用外部查询的表来关联。
SELECT COUNT(DISTINCT custID)
FROM customers c
WHERE EXISTS(
SELECT *
FROM orders O
JOIN lineitems L ON O.orderID = L.orderID
WHERE C.custID = O.custID AND L.quantity > 2
);
答案 1 :(得分:1)
我会将其视为两个聚合:
select count(distinct customerid)
from (select o.customerid, l.itemid, count(*) as cnt
from lineitems li join
orders o
on o.orderID = l.orderId
group by o.customerid, l.itemid
) ol
where cnt >= 2;
内部查询计算每个客户购买的商品数量。外部计算客户数量。
编辑:
我可能误解了上述答案的问题。如果你只想要quantity >= 2
,那就更容易了:
select count(distinct o.customerid)
from lineitems li join
orders o
on o.orderID = l.orderId
where l.quantity >= 2;
这可能是表达查询的最简单方法。
答案 2 :(得分:0)
我建议你使用“加入”,
试试这个
选择 计数(*) 从 订单o 内部联接 lineitems l 上 l.orderID = o.orderID 哪里 l.quantity> 2