SQL EXISTS returns 所有行,多于两个表
SQL EXISTS returns all rows, more than two tables
我知道以前有人问过类似的问题,但我还没有看到超过 2 个表的问题。而且好像有区别。
我有三个表需要字段,customers
我需要 customerID
和 orderID
,orders
我从中得到 customerID
和 orderID
和 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 的初学者,所以如果您能在必要时从根本上向我解释一下,我将不胜感激。谢谢。
您不必在 EXISTS
子查询中重复 customers
table。这就是关联的思想:使用外部查询的 table 来关联。
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
);
我会将其视为两个聚合:
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;
内部查询计算每个客户购买的商品数量。外层统计客户数。
编辑:
我可能误解了上面答案的问题。如果你只想要 where quantity >= 2
,那就简单多了:
select count(distinct o.customerid)
from lineitems li join
orders o
on o.orderID = l.orderId
where l.quantity >= 2;
这可能是表达查询的最简单方式。
我建议你使用 "joins" ,
试试这个
select
数数(*)
从
订单o
内部联接
行项目 l
在
l.orderID = o.orderID
在哪里
l.quantity > 2
我知道以前有人问过类似的问题,但我还没有看到超过 2 个表的问题。而且好像有区别。
我有三个表需要字段,customers
我需要 customerID
和 orderID
,orders
我从中得到 customerID
和 orderID
和 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 的初学者,所以如果您能在必要时从根本上向我解释一下,我将不胜感激。谢谢。
您不必在 EXISTS
子查询中重复 customers
table。这就是关联的思想:使用外部查询的 table 来关联。
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
);
我会将其视为两个聚合:
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;
内部查询计算每个客户购买的商品数量。外层统计客户数。
编辑:
我可能误解了上面答案的问题。如果你只想要 where quantity >= 2
,那就简单多了:
select count(distinct o.customerid)
from lineitems li join
orders o
on o.orderID = l.orderId
where l.quantity >= 2;
这可能是表达查询的最简单方式。
我建议你使用 "joins" ,
试试这个
select 数数(*) 从 订单o 内部联接 行项目 l 在 l.orderID = o.orderID 在哪里 l.quantity > 2