PGError:错误:列“p.name”必须出现在GROUP BY子句中或用于聚合函数

时间:2011-01-24 20:24:44

标签: postgresql redmine

我的查询出错了。为什么?我不明白:(

    SELECT p.name, p.id, SUM(hours) AS hours, SUM(logged_hours) AS logged_hours
    FROM (
        SELECT project_id, date, hours, null AS logged_hours
        FROM #{ScheduleEntry.table_name}
        WHERE user_id = #{User.current.id}
            AND date BETWEEN '%s' AND '%s'
        UNION
        SELECT project_id, spent_on AS date, null AS hours, sum(#{TimeEntry.table_name}.hours) AS logged_hours
        FROM #{TimeEntry.table_name}
        WHERE user_id = #{User.current.id}
            AND spent_on BETWEEN '%s' AND '%s'
        GROUP BY project_id, date
    ) AS results
    LEFT JOIN #{Project.table_name} AS p ON p.id = results.project_id
    GROUP BY project_id

1 个答案:

答案 0 :(得分:10)

GROUP BY project_id更改为GROUP BY p.name,p.id

The docs说:

  

当存在GROUP BY时,SELECT列表表达式无法引用除聚合函数之外的未分组列,因为对于未分组的列,将返回多个可能的值