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