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_modezmienna 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