列必须出现在postgresql中的GROUPBY子句错误中

列必须出现在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

我知道这是postgresql中的一个常见问题,但我在stackoverflow上尝试了许多解决方案,但都没有得到结果,这就是为什么我将此贴在上面的原因

这是我在phpPGAdmin查询浏览器上运行的查询

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,这是一个合适的数据库。哦,不,这是主要原因吗,我已经在这个问题上工作了四个小时,谢谢你的帮助:)