Temat: SELECT, wiele tabel, group by
Jako, że znam w tej chwili głównie mysql - zdarzają mi się dziwne wpadki...
Mam zapytanie mysql:
SELECT e.nazwa, p.child_id, sum(p.ma), sum(p.winien)
FROM payment p, elements e
WHERE e.id = p.child_id
GROUP BY p.child_id
(pobiera ~390tys wyników w ~45s, indexy tylko na elementach "id", tabela elements: ~460tys wierszy, payment: ~1.170mln)
Jak to zamienić na zapytanie do postgresql?
Wykonanie tego zapytania w postgresql (pgadminIII).
ERROR: column "e.nazwa" must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: SELECT e.nazwa, p.child_id, sum(p.ma), sum(p.winien)
^
********** Błąd **********
ERROR: column "e.nazwa" must appear in the GROUP BY clause or be used in an aggregate function
Stan SQL:42803
Znak:8
Nie mogę dodać e.nazwa do group by - tam będą przechowywane imiona/nazwiska. Całe zapytanie dotyczy testowej bazy, aby sprawdzić ile różni się wydajność mysql/postgresql, oraz czy jest sens, żebym zabierał się za postgresa, jak mam limit czasowy i o ile nieznajomość tematu będzie mnie opóźniać.
---edit---
Ok, w group by musi być wpisany każdy element który jest przy select (znalezione gdzieś na jakimś forum, nie w dokumentacji). Dodatkowo w sumie group by id jest główne - a id jest unikalne, więc group by wszystkie elementy/group by id jest równoważne (chyba? Grypę mam mogę czegoś nie zrozumieć).
Ostatnio edytowany przez aleextra (2011-03-06 13:28:20)