I get an error with this query. Why? I don't understand :(
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
Change GROUP BY project_id
to GROUP BY p.name,p.id
The docs say:
When
GROUP BY
is present, it is not valid for theSELECT
list expressions to refer to ungrouped columns except within aggregate functions, since there would be more than one possible value to return for an ungrouped column.
来源:https://stackoverflow.com/questions/4786768/pgerror-error-column-p-name-must-appear-in-the-group-by-clause-or-be-used-in