列必须出现在postgresql中的GROUPBY子句错误中
我知道这是postgresql中的一个常见问题,但我在stackoverflow上尝试了许多解决方案,但都没有得到结果,这就是为什么我将此贴在上面的原因 这是我在phpPGAdmin查询浏览器上运行的查询列必须出现在postgresql中的GROUPBY子句错误中,sql,postgresql,Sql,Postgresql,我知道这是postgresql中的一个常见问题,但我在stackoverflow上尝试了许多解决方案,但都没有得到结果,这就是为什么我将此贴在上面的原因 这是我在phpPGAdmin查询浏览器上运行的查询 SELECT target_financial_advisor, acquiror_finanial_advisor, target_nation, acquiror_nation, rank_value, rank_date FROM ma_global WHE
SELECT target_financial_advisor,
acquiror_finanial_advisor,
target_nation,
acquiror_nation,
rank_value,
rank_date
FROM ma_global
WHERE target_nation = 'France'
AND acquiror_nation = 'France'
AND EXTRACT(YEAR
FROM "rank_date") = 2013
AND rank_date IS NOT NULL
GROUP BY target_financial_advisor,
acquiror_finanial_advisor LIMIT 50;
如果我使用group by子句,这个查询不起作用,但是如果我在没有groupby的情况下运行它,那么它就起作用了,不知道原因是什么,我通常在mysql中工作,这是我在postgresql中的第一个查询,它在mysql中工作得很好
错误是
错误:列“ma_global.target_nation”必须出现在GROUP BY中
子句或可用于聚合功能第4行:目标国,
收购国
groupby
子句允许在SELECT
子句中混合普通列和聚合列,其中groupby
必须包含所有非聚合的结果列。为了使您的陈述正确无误,您也可以将目标国、收购国、排名值、排名日期
放入分组依据
子句中。但是删除这个子句会更容易,因为您没有聚合。如果得到重复的行,应在SELECT
子句中添加DISTINCT
:
SELECT DISTINCT target_financial_advisor,
acquiror_finanial_advisor,
target_nation,
acquiror_nation,
rank_value,
rank_date
FROM ma_global
WHERE target_nation = 'France'
AND acquiror_nation = 'France'
AND EXTRACT(YEAR
FROM "rank_date") = 2013
AND rank_date IS NOT NULL
LIMIT 50;
我不确定您想要实现什么,因为您在select中有6列,并按2列分组。。。这个“可怜的老博士后”不知道你想对其他4列做什么。。。如果使用group by,则所有列都必须显示在group by或某些聚合函数中。如果您对这四列中的内容不感兴趣(或者您知道它们在WHERE子句中),请将其从select中删除。。。这是基本的SQL规则 这将有助于:
SELECT target_financial_advisor,
acquiror_finanial_advisor,
target_nation,
acquiror_nation,
rank_value,
rank_date
FROM ma_global
WHERE target_nation = 'France'
AND acquiror_nation = 'France'
AND EXTRACT(YEAR
FROM "rank_date") = 2013
AND rank_date IS NOT NULL
GROUP BY 1,2,3,4,5,6 LIMIT 50;
或者,如果从WHERE子句中删除列:
SELECT target_financial_advisor,
acquiror_finanial_advisor,
rank_value
FROM ma_global
WHERE target_nation = 'France'
AND acquiror_nation = 'France'
AND EXTRACT(YEAR
FROM "rank_date") = 2013
AND rank_date IS NOT NULL
GROUP BY 1,2,3 LIMIT 50;
“rank_date”可以吗?是的,即使我删除了rank_date条件,仍然存在相同的问题错误很明显:如果进行分组,则每个返回值都必须在聚合中使用或出现在分组选择器中。如果目标国家中有200个不同的值,应该返回哪一个?你没有具体说明。这不是MySQL,这是一个合适的数据库。哦,不,这是主要原因吗,我已经在这个问题上工作了四个小时,谢谢你的帮助:)