Mam dwa stoliki employee
i phones
. Pracownik może mieć od 0 do n numerów telefonów. Chcę wymienić nazwiska pracowników wraz z ich numerami telefonów. Korzystam z poniższego zapytania, które działa poprawnie.
SELECT empname,array_agg(phonenumber) AS phonenumbers
FROM employee LEFT OUTER JOIN phones ON employee.empid = phones.empid
GROUP BY employee.empid
Tabela pracowników może zawierać dużą liczbę wierszy. Chcę pobierać tylko niektórych pracowników jednocześnie. Na przykład chcę pobrać 3 pracowników z ich numerami telefonów. Próbuję uruchomić to zapytanie.
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
Ale dostaję ten błąd. ERROR: column "employee.empname" must appear in the GROUP BY clause or be used in an aggregate function
Jedyną różnicą między dwoma zapytaniami jest to, że używam zapytania podrzędnego w tym drugim, aby ograniczyć wiersze przed dołączeniem. Jak rozwiązać ten błąd?
źródło