Postgres のバージョンは?Postgres 9.0 以前を使用している場合、コード構成は実行されません。たとえば、これは許可されていません:
SELECT
p.id,
p.firstname, p.lastname, p.address, -- these auxiliary fields is helpful to program users
count(*)
FROM
people p
JOIN visits v ON p.id = v.person_id
GROUP BY p.id
9.0 以下でこれを行う必要があります。
SELECT
p.id,
p.firstname, p.lastname, p.address, -- these auxiliary fields is helpful to program users
count(*)
FROM
people p
JOIN visits v ON p.id = v.person_id
GROUP BY p.id
,p.firstname, p.lastname, p.address; -- these ancillary fields aids the RDBMS on preventing
-- programmers from accidentally committing the same mistake as MySQL programmers.
Postgres 9.1 を使用している場合、GROUP BY フィールドが主キーである限り、SELECT 句に多くのフィールドがあっても、GROUP BY で使用できるフィールドは 1 つだけです。したがって、これは実行されます:
SELECT
p.id,
p.firstname, p.lastname, p.address, -- these auxiliary fields is helpful to program users
count(*)
FROM
people p
JOIN visits v ON p.id = v.person_id
GROUP BY p.id
-- note that there's no need to repeat the SELECTed fields on GROUP BY clause
Postgres 9.1 は、主キーへの機能依存性を容易にすることができるため、GROUP BY 句に主キーのみを含めることが許可されています。
SQL フィドルの例: http://sqlfiddle.com/#!1/3b857/3