【问题标题】:aggregate functions error. detail listed below聚合函数错误。下面列出的详细信息
【发布时间】:2021-11-30 12:52:21
【问题描述】:

我正在编写一个 SQL 查询来从 northwind.orders 创建一个名为 orders_years 的新表,显示在 1996 年、1997 年和 1998 年每个(不同的)客户下了多少订单。我还将结果分组customer_id 并按 customer_id 对它们进行排序,在运行下面的代码时,它给了我一个错误,说 FROM 中的函数中不允许使用聚合函数 第 2 行:求和

-- 创建新表orders_years:

SELECT customer_id FROM northwind.orders,
SUM (CASE
        WHEN EXTRACT(YEAR FROM order_date) = 1996 THEN 1 ELSE 0
    END) AS orders_96,
SUM(CASE
        WHEN EXTRACT(YEAR FROM order_date) = 1997 THEN 1 ELSE 0
    END) AS orders_97,
    SUM(CASE
        WHEN EXTRACT(YEAR FROM order_date) = 1998 THEN 1 ELSE 0
    END) AS orders_98;
SELECT orders_years FROM northwind.orders
GROUP BY customer_id
ORDER BY customer_id;
    

【问题讨论】:

    标签: python mysql sql postgresql


    【解决方案1】:

    from 子句位置错误

    CREATE TABLE orders (customer_id int, order_date date)
    
    INSERT INTO orders VALUES (1, '1997-01-01'), (2, '1998-01-01')
    
    CREATE tABLE orders_years
    SELECT 
    customer_id ,
    SUM(CASE
            WHEN EXTRACT(YEAR FROM order_date) = 1996 THEN 1 ELSE 0
        END) AS orders_96 ,
    SUM(CASE
            WHEN EXTRACT(YEAR FROM order_date) = 1997 THEN 1 ELSE 0
        END) AS orders_97 ,
    SUM(CASE
            WHEN EXTRACT(YEAR FROM order_date) = 1998 THEN 1 ELSE 0
        END) AS orders_98
    
    FROM orders
    GROUP BY customer_id
    ORDER BY customer_id;;
        
    
    SELECT * FROM orders_years
    
    客户 ID |订单_96 |订单_97 |订单_98 ----------: | --------: | --------: | --------: 1 | 0 | 1 | 0 2 | 0 | 0 | 1

    db小提琴here

    【讨论】:

    • 谢谢,但我仍然在第 3 行遇到语法错误,该代码也是如此。 “EXTRACT”第 3 行或附近的语法错误:EXTRACT(YEAR FROM order_date) = 1996 THEN 1 ELSE 0 ^
    • 从您的简短示例中,您不清楚您的期望
    猜你喜欢
    • 2010-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-01
    相关资源
    最近更新 更多