Następujące zapytanie jest nieprawidłowe z ONLY_FULL_GROUP_BY
włączony. Pierwszy jest nieprawidłowy, ponieważ nazwa na liście wyboru nie jest nazwana w GROUP BY
klauzula
mysql> SELECT name, MAX(age) FROM t;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...)
bez kolumn GROUP jest nielegalne, jeśli nie ma klauzuli GROUP BY
Możesz przepisać zapytanie, aby działało dobrze jako
mysql> SELECT name, MAX(age) FROM t GROUP BY name;
lub
Wyłącz ONLY_FULL_GROUP_BY a błąd powinien zniknąć.
Linki mogą Ci pomóc
- Błędy MySQL możesz wyszukiwać tutaj
- grupuj według funkcji
- podobny post na stackoverflow.com
- inne forum, na którym omawiano podobny problem
- server-sql-mode
AKTUALIZUJ
To jest odpowiedź na Twój komentarz.
But i would like to know more about disabling the Group BY mode in mysql db.
-
Serwer MySQL może działać w różnych trybach SQL i może stosować te tryby w różny sposób dla różnych klientów, w zależności od wartości
sql_mode
zmienna systemowa. Możliwość ta umożliwia każdej aplikacji dostosowanie trybu pracy serwera do własnych wymagań. -
Aby ustawić tryb SQL podczas uruchamiania serwera, użyj
--sql-mode="modes"
opcja w wierszu poleceń lubsql-mode="modes"
w pliku opcji, takim jakmy.cnf (Unix operating systems)
lubmy.ini (Windows)
. tryby to lista różnych trybów oddzielonych przecinkami. Aby jawnie wyczyścić tryb SQL, ustaw go na pusty ciąg za pomocą--sql-mode=""
w wierszu poleceń lubsql-mode=""
w pliku opcji. -
Aby zmienić tryb SQL w czasie wykonywania, użyj
SET [GLOBAL|SESSION] sql_mode='modes'
instrukcja do ustawienia zmiennej systemowej sql_mode. Ustawienie zmiennej GLOBAL wymaga uprawnienia SUPER i wpływa na działanie wszystkich klientów, którzy się od tego czasu łączą. Ustawienie zmiennej SESSION ma wpływ tylko na bieżącego klienta. Każdy klient może w dowolnym momencie zmienić własną wartość sesji sql_mode. -
Aby określić bieżącą wartość globalną lub sesyjną sql_mode, użyj następujących instrukcji:
SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;
-
Możesz odwołać się do tabeli sql_mode
I followed the manuals, Added the ONLY_FULL_GROUP_BY in sql-mode
but no difference.
Dzieje się tak z powodu wersji MySQL. Jaka jest wersja MySQL na Twoim lokalnym komputerze?
Jak sprawdzić wersję MySQL?
mysql> SELECT version();
+-----------+
| version() |
+-----------+
| 5.5.28 |
+-----------+
1 row in set (0.00 sec)
Do testowania sql_mode ONLY_FULL_GROUP_BY
, utworzyłem tabelę patient
z dwiema kolumnami id, name
i wstawione rekordy. Pamiętaj sql_mode ONLY_FULL_GROUP_BY
nie jest ustawiony domyślnie, musisz ustawić, jeśli chcesz.
1) Wersja MySQL 5.0.45-community-nt
SELECT name, MAX(id) FROM patient;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
Nie udało się, ustawienie trybu sql_mode na ONLY_FULL_GROUP_BY
nie miało sensu ponieważ nie zezwala na kolumny niezagregowane, które nie są wymienione w klauzuli GROUP BY.
2) Wersja MySQL społeczność 5.1.40
mysql> SELECT name, MAX(id) from patient;
+----------+--------+
| MAX(id) | name |
+----------+--------+
| 33 | aniket |
+----------+--------+
1 row in set (0.03 sec)
Następnie po ustawieniu sql_mode ONLY_FULL_GROUP_BY
mysql> set sql_mode = 'ONLY_FULL_GROUP_BY';
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT name, MAX(id) from patient;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
3) Wersja MySQL 5.5.28
mysql> SELECT name, MAX(id) from patient;
+----------+--------+
| MAX(id) | name |
+----------+--------+
| 33 | aniket |
+----------+--------+
1 row in set (0.03 sec)
Następnie po ustawieniu sql_mode ONLY_FULL_GROUP_BY
mysql> set sql_mode = 'ONLY_FULL_GROUP_BY';
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT name, MAX(id) from patient;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
Wniosek
Jak widać, zapytanie nie powiodło się w wersji 5.0.45 i powiodło się w/po 5.1.40 i 5.5.28 Przed wersją MySQL 5.1.10(nie jestem pewien)
zapytanie bez GROUP BY
nie powiedzie się niezależnie od sql_mode ONLY_FULL_GROUP_BY
ustawić czy nie.
Kilka interesujących błędów i link do trybu sql_mode
- ONLY_FULL_GROUP_BY tryb sql jest zbyt restrykcyjny
- tryb sql:nie działa tylko pełna grupa według trybu
- Często zadawane pytania dotyczące MySQL 5.0:Tryb SQL serwera