Nakaz stosowania GROUP BY dla każdej kolumny |
Nakaz stosowania GROUP BY dla każdej kolumny |
27.08.2012, 22:58:15
Post
#1
|
|
Grupa: Zarejestrowani Postów: 97 Pomógł: 15 Dołączył: 12.08.2012 Skąd: Zabrze Ostrzeżenie: (10%) |
Witam!
Na localhoście zapytania do PostgreSQL nie zgłaszają żadnych błędów (PostgreSQL 9.1.4). Na serwerze natomiast (PostgreSQL 9.0.7) zgłasza mi taki błąd: Kod n exception has been thrown during the rendering of a template ("SQLSTATE[42803]: Grouping error: 7 BŁĄD: kolumna "c0_.name" musi występować w klauzuli GROUP BY lub być użyta w funkcji agregującej LINE 1: SELECT c0_.id AS id0, c0_.name AS name1, COUNT(i1_.id) AS sc... ^" Wie ktoś może od czego to zależy? Wersja postgresa? Konfiguracja? Generalnie, postgres chce abym dodał klauzulę GROUP BY do każdej kolumny c0.*. |
|
|
12.09.2012, 22:09:19
Post
#2
|
|
Grupa: Zarejestrowani Postów: 94 Pomógł: 31 Dołączył: 12.10.2008 Skąd: WAT Ostrzeżenie: (0%) |
Geralnie skoro robisz COUNT() to musisz bazie powiedzieć w jaki sposób ma postąpić z innymi - powielonymi lub nie kolumnami w selekcie. Czyli max(), min() czy też GROUP BY więc słusznie Ci tu postgres wymusza dorzucenie do grupa pozostałych kolumn. Skopiuj sobie dane z serwera do lokala i wtedy sprawdź czy nic postgres nie krzyczy. Najstarszego postgresa pamiętam jakoś 8.2 i tam Cię na pewno bez group by nie puszczał.
-------------------- • Wszystkie wielkości świata nie są tyle warte, co dobra przyjaźń... • |
|
|
12.09.2012, 22:31:40
Post
#3
|
|
Grupa: Zarejestrowani Postów: 279 Pomógł: 56 Dołączył: 3.06.2010 Skąd: Tarnowskie Góry Ostrzeżenie: (0%) |
Zgodnie ze standardem powinieneś grupować po kolumnach dla których używasz funkcji agregujących. W tym wypadku pojawienie się błedu jest dla mnie poprawnym działaniem, raczej zastanawiałbym się dlaczego na innej wersji się nie pojawił niż odwrotnie.
-------------------- |
|
|
Wersja Lo-Fi | Aktualny czas: 25.04.2024 - 12:51 |