A consulta a seguir é inválida com
ONLY_FULL_GROUP_BY
ativado. O primeiro é inválido porque o nome na lista de seleção não é nomeado no GROUP BY
cláusula mysql> SELECT name, MAX(age) FROM t;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...)
sem colunas GROUP é ilegal se não houver cláusula GROUP BY
Você pode reescrever a consulta para funcionar bem como
mysql> SELECT name, MAX(age) FROM t GROUP BY name;
ou
Desative o ONLY_FULL_GROUP_BY e o erro deve desaparecer.
Os links podem ajudar você
- Você pode pesquisar erros do MySQL aqui
- group-by-functions
- postagem semelhante em stackoverflow.com
- outro fórum onde um problema semelhante foi discutido
- server-sql-mode
ATUALIZAÇÃO
Esta é a resposta ao seu comentário.
But i would like to know more about disabling the Group BY mode in mysql db.
Modos SQL do servidor
-
O servidor MySQL pode operar em diferentes modos SQL e pode aplicar esses modos de forma diferente para diferentes clientes, dependendo do valor dosql_mode
variável do sistema. Esse recurso permite que cada aplicativo personalize o modo operacional do servidor de acordo com seus próprios requisitos.
-
Para definir o modo SQL na inicialização do servidor, use o--sql-mode="modes"
opção na linha de comando ousql-mode="modes"
em um arquivo de opções comomy.cnf (Unix operating systems)
oumy.ini (Windows)
. modos é uma lista de modos diferentes separados por vírgulas. Para limpar o modo SQL explicitamente, defina-o como uma string vazia usando--sql-mode=""
na linha de comando ousql-mode=""
em um arquivo de opções.
-
Para alterar o modo SQL em tempo de execução, use um
SET [GLOBAL|SESSION] sql_mode='modes'
instrução para definir a variável de sistema sql_mode. Definir a variável GLOBAL requer o privilégio SUPER e afeta a operação de todos os clientes que se conectam a partir desse momento. Definir a variável SESSION afeta apenas o cliente atual. Qualquer cliente pode alterar seu próprio valor sql_mode de sessão a qualquer momento.
-
Para determinar o valor sql_mode global ou de sessão atual, use as seguintes instruções:
SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;
-
Você pode consultar a tabela sql_mode
I followed the manuals, Added the ONLY_FULL_GROUP_BY in sql-mode
but no difference.
Isso acontece por causa da versão do MySQL. Qual é a versão do MySQL do seu computador local?
Como verificar a versão do MySQL?
mysql> SELECT version();
+-----------+
| version() |
+-----------+
| 5.5.28 |
+-----------+
1 row in set (0.00 sec)
Para testar sql_mode
ONLY_FULL_GROUP_BY
, criei a tabela patient
com duas colunas id, name
e registros inseridos. Lembre-se de sql_mode ONLY_FULL_GROUP_BY
não é definido padrão, você precisa definir se quiser. 1)Versão do 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
Ele falhou, não fazia sentido definir o sql_mode para
ONLY_FULL_GROUP_BY
pois não permitirá colunas não agregadas que não sejam nomeadas na cláusula GROUP BY. 2)Versão do MySQL 5.1.40-community
mysql> SELECT name, MAX(id) from patient;
+----------+--------+
| MAX(id) | name |
+----------+--------+
| 33 | aniket |
+----------+--------+
1 row in set (0.03 sec)
Então, depois de definir 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)Versão do MySQL 5.5.28
mysql> SELECT name, MAX(id) from patient;
+----------+--------+
| MAX(id) | name |
+----------+--------+
| 33 | aniket |
+----------+--------+
1 row in set (0.03 sec)
Então, depois de definir 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
Conclusão
Como você pode ver, a consulta falhou na versão 5.0.45 e foi bem-sucedida em/após 5.1.40 e 5.5.28Antes da versão do MySQL 5.1.10(não tenho certeza) consulta sem
GROUP BY
falha independentemente do sql_mode ONLY_FULL_GROUP_BY
definido ou não. Alguns bugs interessantes e link de perguntas frequentes do sql_mode
- ONLY_FULL_GROUP_BY modo SQL é excessivamente restritivo
- sql-mode:apenas grupo completo por modo não funciona
- Perguntas frequentes do MySQL 5.0:modo SQL do servidor