我知道这是postgresql中的一个常见问题但我在stackoverflow上尝试了很多解决方案,但没有得到结果,这就是为什么我在SO上发布这个问题。
这是我在phpPGAdmin查询浏览器上运行的查询。
{{1}}
如果我使用group by子句这个查询不起作用但如果我没有groupby运行它然后它工作,不知道原因是什么,我通常在mysql中工作,这是我在postgresql中的第一个查询,它在mysql中运行良好。
错误是
错误:列" ma_global.target_nation"必须出现在GROUP BY中 子句或用于聚合函数LINE 4:target_nation, acquiror_nation,
答案 0 :(得分:1)
GROUP BY
子句允许在SELECT
子句中混合普通列和聚合列,其中GROUP BY
必须包含非聚合的所有结果列。为了使您的陈述正确,您也可以将target_nation, acquiror_nation, rank_value, rank_date
放入GROUP BY
子句中。但删除此子句会更容易,因为您没有聚合。如果您获得重复的行,则应在DISTINCT
子句中添加SELECT
:
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;
答案 1 :(得分:1)
我不确定你想要达到什么目标,因为你有2列选择和2列分组......这个糟糕的老帖子'我不知道你要对其他4列做什么...如果你按所有列使用group必须出现在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;