分组通过要求额外的列

时间:2013-12-24 13:22:08

标签: sql database postgresql

我们正在尝试运行此查询。

select ccr.id as id, ccr.title as name, c.name as contract, ccr.status as status
from change_request   ccr 
LEFT JOIN contract c ON ccr.contract_id = c.id 
where ccr.id < 2000
GROUP BY ccr.id, c.id
order by id

抛出错误 * ** 错误 ** *

错误:列“ccr.title”必须出现在GROUP BY子句中或用于聚合函数 SQL状态:42803 性格:22

为什么要求同一个表中的多个列。我的意思是如果我们按ccr.id进行分组,则不应询问同一表中的所有列。

更有趣的是,以下查询(类似于上面)运行正常。

select aim.id as id, aim.name as name, c.name as contract, aim.planned_completion_date as plannedcompetitiondate

from action_item_mgmt aim 
LEFT JOIN contract c ON aim.contract_id = c.id 

WHERE aim.id < 2000
group by aim.id, c.id
order by id

2 个答案:

答案 0 :(得分:2)

在任一查询中都没有聚合(例如count()sum()avg()等):完全删除group by子句。

答案 1 :(得分:1)

我可以看到第一个查询不起作用的唯一方法是列id不是change_request表的主键。

如果你把它作为主键你的第一个查询应该可以正常工作,尽管如上所述,分组似乎相当多余而没有聚合。