Mysql 无效操作:列“[column_name]”必须出现在GROUP BY子句中或用于聚合函数中;

Mysql 无效操作:列“[column_name]”必须出现在GROUP BY子句中或用于聚合函数中;,mysql,postgresql,group-by,amazon-redshift,aggregate-functions,Mysql,Postgresql,Group By,Amazon Redshift,Aggregate Functions,我已经阅读了近10多个与我相关的问题,但没有人在我的案例中工作。因为我的数据库中有3个表,我正试图根据它们计算与时间年销售额相关的销售额。我需要按添加的日期按查询分组的位置。在MYSQL中,它工作得很好,给了我很好的结果,但在红移中,我被卡住了 MYSQL查询: postgre查询中是否存在语法错误,以及为什么我需要在GROUP BY中添加o.date_,您的ORDER BY子句中添加了o.date_,但您的实际结果集中没有。查询完成后,ORDER BY即完成 您可以使用: ORDER BY m

我已经阅读了近10多个与我相关的问题,但没有人在我的案例中工作。因为我的数据库中有3个表,我正试图根据它们计算与时间年销售额相关的销售额。我需要按添加的日期按查询分组的位置。在MYSQL中,它工作得很好,给了我很好的结果,但在红移中,我被卡住了

MYSQL查询:

postgre查询中是否存在语法错误,以及为什么我需要在GROUP BY中添加o.date_,您的ORDER BY子句中添加了o.date_,但您的实际结果集中没有。查询完成后,ORDER BY即完成

您可以使用:

ORDER BY month asc, year asc LIMIT 25
此外,您还可以通过以下方式从组中删除附加括号:

有关now函数的使用,请参见红移。改为使用getdate,就像现在一样。

在包含GROUP BY works的查询中,ORDER BY子句中的一列,就好像它在SELECT子句中提到过一样

你有

SELECT
MONTHNAME(o.date_added) AS MONTH,
YEAR(o.date_added) AS YEAR,
COUNT(o.order_id) AS orders,
FROM
order o 
...
GROUP BY
    MONTH(o.date_added),
    YEAR(o.date_added)
ORDER BY
    date_added ASC
LIMIT 0, 25
在MySQL中,它利用了其臭名昭著的非标准处理组的优势

您想要得到的是一个在多个DBMS中工作的查询,而不是这个

ORDER BY
    MONTH(o.date_added) ASC,
    YEAR(o.date_added) ASC   

将o.date_添加到GROUPBY子句是不正确的,因为您不是按整个日期分组,而是按日期的月份和年份分组

我发现了错误。我使用了SQL Workbench并获得了我在POSTGRE查询中使用的关于NOW的错误函数

简单地说,我现在被当前的约会取代了,一切都对我有利。另外,我得到了限制0,25的错误,但在POSTGRE中,它们允许限制25[OFFSET n]

现在,我的查询如下所示:

SELECT
EXTRACT(MONTH FROM o.date_added) AS month,
EXTRACT(YEAR FROM o.date_added) AS year,
COUNT(o.order_id) AS orders
FROM
orders o  
LEFT JOIN
(
    SELECT
        op.order_id,
        SUM(op.quantity) AS op_qty,
        SUM(op.total) AS total,
        SUM(op.cost) AS cost            
    FROM
        order_product op 
    GROUP BY
        op.order_id
) op 
    ON op.order_id = o.order_id             
LEFT JOIN
(
    SELECT
        order_id                       
    FROM
        order_total 
    WHERE
        1 
    GROUP BY
        order_id
) ot 
    ON ot.order_id = o.order_id                        
WHERE
(
    DATE(o.date_added) >= CURRENT_DATE + interval '-24 month' 
    AND DATE(o.date_added) <= DATE(CURRENT_DATE)
)                              
GROUP BY EXTRACT(MONTH FROM o.date_added), EXTRACT(YEAR FROM o.date_added)
ORDER BY year ASC, month ASC LIMIT 25

注意:如果您正在使用红移。这与错误无关。我建议使用SQLWorkbench。它解释了错误。

它给出了错误`无效操作:无法识别类型记录的排序运算符`是否将order by列作为变量传递?见DB小提琴。另外,您没有提到您正在使用哪个版本的PostgreSQL。我在AWS红移中使用的是sir postgree versionis 8.0.2。可能是红移的PostgreSQL版本触发的另一个错误。请尝试按从分组中删除额外的括号。请参阅DB-Fiddle.OK,这是一个不同的错误,并指出了红移如何只允许在leader节点上使用函数。查询中的主要嫌疑犯可能是now函数。请参阅文档链接。sir它给出了一个错误无效操作:无法识别类型记录的排序运算符;
SELECT
MONTHNAME(o.date_added) AS MONTH,
YEAR(o.date_added) AS YEAR,
COUNT(o.order_id) AS orders,
FROM
order o 
...
GROUP BY
    MONTH(o.date_added),
    YEAR(o.date_added)
ORDER BY
    date_added ASC
LIMIT 0, 25
ORDER BY
    MONTH(o.date_added) ASC,
    YEAR(o.date_added) ASC   
SELECT
EXTRACT(MONTH FROM o.date_added) AS month,
EXTRACT(YEAR FROM o.date_added) AS year,
COUNT(o.order_id) AS orders
FROM
orders o  
LEFT JOIN
(
    SELECT
        op.order_id,
        SUM(op.quantity) AS op_qty,
        SUM(op.total) AS total,
        SUM(op.cost) AS cost            
    FROM
        order_product op 
    GROUP BY
        op.order_id
) op 
    ON op.order_id = o.order_id             
LEFT JOIN
(
    SELECT
        order_id                       
    FROM
        order_total 
    WHERE
        1 
    GROUP BY
        order_id
) ot 
    ON ot.order_id = o.order_id                        
WHERE
(
    DATE(o.date_added) >= CURRENT_DATE + interval '-24 month' 
    AND DATE(o.date_added) <= DATE(CURRENT_DATE)
)                              
GROUP BY EXTRACT(MONTH FROM o.date_added), EXTRACT(YEAR FROM o.date_added)
ORDER BY year ASC, month ASC LIMIT 25