【问题标题】:Why two of my different sql queries that must perform the same result act different?为什么我必须执行相同结果的两个不同 sql 查询的行为不同?
【发布时间】:2021-02-26 12:06:52
【问题描述】:

我需要获取 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);

这是我的数据架构:

【问题讨论】:

  • 也许你想要count(distinct...)而不是distinct count(...)
  • @jjanes 你是对的,也许把它作为答案发布?

标签: sql postgresql datetime count date-arithmetic


【解决方案1】:

这两个查询都不符合您的要求。您正在使用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

【讨论】:

    猜你喜欢
    • 2012-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-03
    • 1970-01-01
    • 1970-01-01
    • 2013-05-23
    相关资源
    最近更新 更多