为什么我的两个必须执行相同结果的不同 sql 查询表现不同?
Why two of my different sql queries that must perform the same result act different?
我需要获取 1990 年的新买家数量。
第一个查询说它是 17,但第二个查询说它是 29?那么哪一个是错误的,为什么?
SELECT DISTINCT COUNT(customer_id) FROM SALES_ORDER WHERE
EXTRACT(YEAR FROM order_date) = 1990
AND
customer_id NOT IN (SELECT customer_id FROM SALES_ORDER WHERE EXTRACT(YEAR FROM order_date) < 1990);
SELECT DISTINCT COUNT(customer_id) FROM SALES_ORDER WHERE
customer_id IN (SELECT customer_id FROM SALES_ORDER WHERE EXTRACT(YEAR FROM order_date) = 1990)
AND
customer_id NOT IN (SELECT customer_id FROM SALES_ORDER WHERE EXTRACT(YEAR FROM order_date) < 1990);
这是我的数据模式:
这两个查询都不符合您的要求。您正在使用 SELECT DISTINCT COUNT(customer_id)
,而您可能需要 SELECT COUNT(DISTINCT customer_id)
.
我发现用两级聚合表达逻辑会更简单:
select count(*)
from (
select customer_id
from sales_order
group by customer_id
having extract(year from min(order_date)) = 1990
) t
我需要获取 1990 年的新买家数量。 第一个查询说它是 17,但第二个查询说它是 29?那么哪一个是错误的,为什么?
SELECT DISTINCT COUNT(customer_id) FROM SALES_ORDER WHERE
EXTRACT(YEAR FROM order_date) = 1990
AND
customer_id NOT IN (SELECT customer_id FROM SALES_ORDER WHERE EXTRACT(YEAR FROM order_date) < 1990);
SELECT DISTINCT COUNT(customer_id) FROM SALES_ORDER WHERE
customer_id IN (SELECT customer_id FROM SALES_ORDER WHERE EXTRACT(YEAR FROM order_date) = 1990)
AND
customer_id NOT IN (SELECT customer_id FROM SALES_ORDER WHERE EXTRACT(YEAR FROM order_date) < 1990);
这是我的数据模式:
这两个查询都不符合您的要求。您正在使用 SELECT DISTINCT COUNT(customer_id)
,而您可能需要 SELECT COUNT(DISTINCT customer_id)
.
我发现用两级聚合表达逻辑会更简单:
select count(*)
from (
select customer_id
from sales_order
group by customer_id
having extract(year from min(order_date)) = 1990
) t