나는 두 개의 테이블을 가지고 employee
와 phones
. 직원은 0에서 n까지의 전화 번호를 가질 수 있습니다. 직원 이름을 전화 번호와 함께 나열하고 싶습니다. 잘 실행되는 아래 쿼리를 사용하고 있습니다.
SELECT empname,array_agg(phonenumber) AS phonenumbers
FROM employee LEFT OUTER JOIN phones ON employee.empid = phones.empid
GROUP BY employee.empid
직원 테이블에 많은 수의 행이 포함될 수 있습니다. 한 번에 일부 직원 만 가져오고 싶습니다. 예를 들어 전화 번호를 가진 3 명의 직원을 가져오고 싶습니다. 이 쿼리를 실행하려고합니다.
SELECT empname,array_agg(phonenumber) AS phonenumbers
FROM
(SELECT * FROM employee ORDER BY empname LIMIT 3 OFFSET 0) AS employee
LEFT OUTER JOIN phones ON employee.empid = phones.empid
GROUP BY employee.empid
그러나이 오류가 발생합니다. ERROR: column "employee.empname" must appear in the GROUP BY clause or be used in an aggregate function
두 쿼리의 유일한 차이점은 후자의 하위 쿼리를 사용하여 조인 전에 행을 제한한다는 것입니다. 이 오류를 어떻게 해결합니까?