La lista SELECT no está en la cláusula GROUP BY y contiene una columna no agregada… incompatible con sql_mode = only_full_group_by

135
Dhanu K 2017-01-27 19:27.

Estoy usando MySQL 5.7.13 en mi PC con Windows con WAMP Server

Aquí mi problema es al ejecutar esta consulta

SELECT *
FROM `tbl_customer_pod_uploads`
WHERE `load_id` = '78' AND
      `status` = 'Active'
GROUP BY `proof_type`

Siempre recibo un error como este

La expresión # 1 de la lista SELECT no está en la cláusula GROUP BY y contiene la columna no agregada 'returntr_prod.tbl_customer_pod_uploads.id' que no depende funcionalmente de las columnas de la cláusula GROUP BY; esto es incompatible con sql_mode = only_full_group_by

¿Puedes decirme cuál es la mejor solución?

Necesito un resultado como

+----+---------+---------+---------+----------+-----------+------------+---------------+--------------+------------+--------+---------------------+---------------------+
| id | user_id | load_id | bill_id | latitude | langitude | proof_type | document_type | file_name    | is_private | status | createdon           | updatedon           |
+----+---------+---------+---------+----------+-----------+------------+---------------+--------------+------------+--------+---------------------+---------------------+
|  1 |       1 | 78      | 1       | 21.1212  | 21.5454   |          1 |             1 | id_Card.docx |          0 | Active | 2017-01-27 11:30:11 | 2017-01-27 11:30:14 |
+----+---------+---------+---------+----------+-----------+------------+---------------+--------------+------------+--------+---------------------+---------------------+

17 answers

261
Dhanu K 2017-01-27 19:44.

Esta

La expresión # 1 de la lista SELECT no está en la cláusula GROUP BY y contiene la columna no agregada 'returntr_prod.tbl_customer_pod_uploads.id' que no depende funcionalmente de las columnas de la cláusula GROUP BY; esto es incompatible con sql_mode = only_full_group_by

se resolverá simplemente cambiando el modo sql en MySQL con este comando,

SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

Esto también funciona para mí. Usé esto, porque en mi proyecto hay muchas consultas como esta, así que acabo de cambiar este modo SQL a only_full_group_by

Gracias... :-)

82
Tim Biegeleisen 2017-01-27 19:34.

Cuando el only_full_group_bymodo de MySQL está activado, significa que se aplicarán reglas estrictas de ANSI SQL al usar GROUP BY. Con respecto a su consulta, esto significa que si pertenece GROUP BYa la proof_typecolumna, solo puede seleccionar dos cosas:

  • la proof_typecolumna, o
  • agregados de cualquier otra columna


Por "agregados" de otras columnas, me refiero a usar una función de agregado como MIN(), MAX()o AVG()con otra columna. Entonces, en su caso, la siguiente consulta sería válida:

SELECT proof_type,
       MAX(id) AS max_id,
       MAX(some_col),
       MIN(some_other_col)
FROM tbl_customer_pod_uploads
WHERE load_id = '78' AND
      status = 'Active'
GROUP BY proof_type

La gran mayoría de las GROUP BYpreguntas de MySQL que veo en SO tienen el modo estricto desactivado, por lo que la consulta se está ejecutando, pero con resultados incorrectos. En su caso, la consulta no se ejecutará en absoluto, lo que le obligará a pensar en lo que realmente quiere hacer.

Nota: ANSI SQL amplía lo que se permite seleccionar GROUP BYal incluir también columnas que son funcionalmente dependientes de la (s) columna (s) que se seleccionan. Un ejemplo de dependencia funcional sería agrupar por una columna de clave principal en una tabla. Dado que se garantiza que la clave principal es única para cada registro, también se determinaría el valor de cualquier otra columna. MySQL es una de las bases de datos que permite esto (SQL Server y Oracle no AFAIK).

48
Rakesh Soni 2018-08-01 23:01.

Utilice cualquier solución

(1) PHPMyAdmin

si está utilizando phpMyAdmin, cambie la configuración " sql_mode " como se menciona en la siguiente captura de pantalla.

Edite la variable "modo sql" y elimine el texto "ONLY_FULL_GROUP_BY" del valor

(2) Símbolo del sistema / SQL Ejecute el siguiente comando.

SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

(3) No use SELECT *

Utilice la columna relevante en la consulta SELECT. columnas de medios relevantes, que vienen en la cláusula "agrupar por" o en la columna con la función agregada (MAX, MIN, SUM, COUNT, etc.)


Nota IMPORTANTE

Los cambios realizados utilizando el punto (1) O el punto (2) no lo configurarán PERMANENTEMENTE, y se revertirá después de cada reinicio.

Por lo tanto, debe establecer esto en su archivo de configuración (por ejemplo, /etc/mysql/my.cnf en la sección [mysqld]), para que los cambios sigan vigentes después de reiniciar MySQL:

Archivo de configuración : /etc/mysql/my.cnf

Nombre de la variable : sql_mode OR sql-mode

21
Anand Huded 2019-09-04 20:19.

El siguiente método resolvió mi problema:

En ubuntu

Tipo: sudo vi /etc/mysql/my.cnf

escriba A para ingresar al modo de inserción

En la última línea, pegue el código de dos líneas a continuación:

[mysqld]
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

Escriba esc para salir del modo de entrada

Type :wq to save and close vim.

Escriba sudo service mysql restartpara reiniciar MySQL.

20
Anil Gupta 2017-08-30 08:17.

Puede deshabilitar sql_mode = only_full_group_by mediante algún comando, puede intentarlo mediante terminal o MySql IDE

mysql> set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

mysql> set session sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
12
Gullu Mutullu 2020-01-24 17:46.

En Ubuntu

Paso 1:

sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

Paso 2: Vaya a la última línea y agregue lo siguiente

sql_mode = ""

Paso 3: guardar

Paso 4: reinicia el servidor mysql.

9
ElliotMok 2017-10-19 21:58.

Para que la consulta sea legal en SQL92, la columna de nombre debe omitirse de la lista de selección o nombrarse en la cláusula GROUP BY.

SQL99 y posteriores permiten tales no agregados por característica opcional T301 si son funcionalmente dependientes de las columnas GROUP BY: Si existe tal relación entre nombre y custid, la consulta es legal. Este sería el caso, por ejemplo, si fuera una clave primaria de los clientes.

MySQL 5.7.5 y versiones posteriores implementan la detección de dependencia funcional. Si el modo SQL ONLY_FULL_GROUP_BY está habilitado (que es por defecto), MySQL rechaza las consultas para las cuales la lista de selección, la condición HAVING o la lista ORDER BY se refieren a columnas no agregadas que no están nombradas en la cláusula GROUP BY ni son funcionalmente dependientes de ellas .

a través de MySQL :: MySQL 5.7 Reference Manual :: 12.19.3 Manejo MySQL de GROUP BY

Puede resolverlo cambiando el modo sql con este comando:

SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

y ... recuerda volver a conectar la base de datos !!!

5
fajr abd el ali 2020-04-24 07:32.

vaya a phpmyadmin y abra la consola y ejecute esta solicitud

SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
4
siva.picky 2020-02-01 04:01.

Hola, en lugar de tomar todas las columnas, solo tome lo que necesita usando ANY_VALUE(column_name). Funciona perfectamente. Sólo revisa.

P.ej:

SELECT proof_type,any_value("customer_name") as customer_name
FROM `tbl_customer_pod_uploads`
WHERE `load_id` = '78' AND `status` = 'Active' GROUP BY `proof_type`
3
Mr_Bull 2020-02-03 21:42.

Busque "modo SQL" si está usando PhpMyAdmin y quite el valor:, ONLY_FULL_GROUP_BYsimplemente lo hizo y está bien.

3
Sundar 2020-04-28 05:55.
> sudo nano /etc/mysql/my.cnf

Ingrese abajo

[mysqld]
sql_mode = ""

Ctrl + O => Y = Ctrl + X

> sudo service mysql restart
2
jkkenzie 2017-11-13 19:07.

Por cómo se ve, creo que agrupar por múltiples columnas / campos no dañará su resultado. ¿Por qué no intentas agregar al grupo de esta manera?

GROUP BY `proof_type`, `id`

Esto se agrupará proof_typeprimero y luego id. Espero que esto no altere los resultados. En algunos / la mayoría de los casos, agrupar por varias columnas da resultados incorrectos.

1
PrafulPravin 2019-06-26 07:59.
  1. Inicie sesión en phpMyAdmin
  2. Navegue a: Server: localhost: 3306 y no seleccione ninguna base de datos
  3. Haga clic en las variables del menú superior
  4. Busque "modo sql" y edite el valor correspondiente a: NO_ENGINE_SUBSTITUTION

Eso es todo.

Hice esto en mi Ec2 y funcionó a las mil maravillas.

1
Nelson Bwogora 2020-05-06 06:40.

Aquí hay una forma realmente rápida y fácil de configurarlo permanentemente

NB: la ejecución SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','')); es temporal y, al reiniciar el servidor, aún terminará con el error. Para solucionar este problema de forma permanente, haga lo siguiente

  1. Inicie sesión en su servidor como root
  2. en tu terminal ejecutar wget https://gist.githubusercontent.com/nfourtythree/90fb8ef5eeafdf478f522720314c60bd/raw/disable-strict-mode.sh
  3. Haga que el script sea ejecutable ejecutando chmod +x disable-strict-mode.sh
  4. Ejecute el script ejecutando ./disable-strict-mode.sh

Y listo, se realizarán cambios en mysql y se reiniciará

0
Gautam 2020-01-12 05:17.

Actualización para MySQL 8.0

No sql-modelo tendrá, NO_AUTO_CREATE_USERya que se eliminó como se menciona aquí: cómo-configurar-modo-sql-en-mi-cnf-en-mysql-8

[mysqld]
sql-mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"

Además, si alguien no tiene un my.cnfarchivo, crea uno nuevo /etc/my.cnfy luego agrega las líneas anteriores.

0
Shoshinmas 2020-10-17 07:12.

Tuve un problema similar con parte de la trituración de mi base de datos. Lo que hice fue cambiar el parámetro en la base de datos a través de la consola de la base de datos PHPStorm así:

   SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

funciona como un encanto ahora

0
Ahmad Mobaraki 2020-11-18 23:16.

¡Apáguelo only_full_group_bysolo si sabe lo que está haciendo!

Un ejemplo sencillo para demostrar el problema:

Tabla: usuarios

 id   |  name
----------------
  1      ali
  2      john
  3      ali

Cuando usa GROUP BYen la namecolumna:

SELECT * FROM users GROUP BY name;

Hay dos posibles resultados:

  1      ali
  2      john     

O

  2      john
  3      ali

¡MYSQL no sabe qué resultado elegir! Porque hay diferentes idpero ambos tienen name=ali.

Solución 1:

solo seleccionando el namecampo:

SELECCIONAR nombre DE usuarios GRUPO POR nombre;

resultado:

  ali
  john     

Solución 2:

Apagando only_full_group_by. ¡MYSQL le mostrará uno de los dos resultados posibles que mostré antes AL AZAR! (Está bien si realmente no te importa lo idque elija)

Solución3

Utilice una Aggregatefunción como MIN(), MAX()para ayudar a MYSQL a decidir qué debe elegir.

por ejemplo quiero el mínimo id:

SELECT MIN(id), name FROM users GROUP BY name;

resultado:

  1      ali
  2      john     

Escogerá la alifila que tenga el mínimo id.

Related questions

MORE COOL STUFF

La estrella de HGTV, Christina Hall, revela que tiene 'envenenamiento por mercurio y plomo' probablemente por voltear 'casas asquerosas'

La estrella de HGTV, Christina Hall, revela que tiene 'envenenamiento por mercurio y plomo' probablemente por voltear 'casas asquerosas'

La estrella de HGTV, Christina Hall, revela que le diagnosticaron envenenamiento por mercurio y plomo, probablemente debido a su trabajo como manipuladora de casas.

La estrella de 'Love Is Blind' Brennon Lemieux responde a los cargos de violencia doméstica

La estrella de 'Love Is Blind' Brennon Lemieux responde a los cargos de violencia doméstica

Recientemente salió a la luz un informe policial que acusa a la estrella de 'Love Is Blind', Brennon, de violencia doméstica. Ahora, Brennon ha respondido a los reclamos.

Wynonna Judd se dio cuenta de que ahora es la matriarca de la familia Judd en un momento festivo de pánico

Wynonna Judd se dio cuenta de que ahora es la matriarca de la familia Judd en un momento festivo de pánico

Conozca cómo Wynonna Judd se dio cuenta de que ahora es la matriarca de la familia mientras organizaba la primera celebración de Acción de Gracias desde que murió su madre, Naomi Judd.

Experto en lenguaje corporal explica los 'paralelos' entre Kate Middleton y la princesa Diana

Experto en lenguaje corporal explica los 'paralelos' entre Kate Middleton y la princesa Diana

Descubra por qué un destacado experto en lenguaje corporal cree que es fácil trazar "tales paralelismos" entre la princesa Kate Middleton y la princesa Diana.

Los láseres arrojan luz sobre por qué necesita cerrar la tapa antes de descargar

Los láseres arrojan luz sobre por qué necesita cerrar la tapa antes de descargar

Los inodoros arrojan columnas de aerosol invisibles con cada descarga. ¿Como sabemos? La prueba fue capturada por láseres de alta potencia.

The Secrets of Airline Travel Quiz

The Secrets of Airline Travel Quiz

Air travel is far more than getting from point A to point B safely. How much do you know about the million little details that go into flying on airplanes?

Where in the World Are You? Take our GeoGuesser Quiz

Where in the World Are You? Take our GeoGuesser Quiz

The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!

¿Caduca el repelente de insectos?

¿Caduca el repelente de insectos?

¿Sigue siendo efectivo ese lote de repelente de insectos que te quedó del verano pasado? Si es así, ¿por cuánto tiempo?

Se revela la estatua de Godzilla más nueva de Tokio

Se revela la estatua de Godzilla más nueva de Tokio

Anteriormente, Kotaku informó que un hotel Godzilla se estaba abriendo en Tokio este abril. Junto al hotel, estaba programada la aparición de una enorme cabeza de 'Zilla, pero todo lo que hemos visto fueron imágenes conceptuales computarizadas.

El alcalde de Chicago realmente quiere que Elon Musk perfore un túnel debajo de la ciudad

El alcalde de Chicago realmente quiere que Elon Musk perfore un túnel debajo de la ciudad

Foto: Getty Desde que lanzó The Boring Company hace un año, Elon Musk ha mencionado varios sitios de construcción posibles para el negocio de perforación de túneles y ha descartado una vaga referencia a una aprobación gubernamental "verbal" para un túnel Hyperloop que conecta la ciudad de Nueva York y Washington. , CC. Pero ahora sabemos que al menos un alcalde quiere que Musk perfore un agujero debajo de su ciudad.

Ponle una tapa. En realidad, ponle una tapa a todo. Consigue 12 tapas de cocina elásticas de silicona por $14. [Exclusivo]

Ponle una tapa. En realidad, ponle una tapa a todo. Consigue 12 tapas de cocina elásticas de silicona por $14. [Exclusivo]

Tapas elásticas de silicona de Tomorrow's Kitchen, paquete de 12 | $14 | Amazonas | Código promocional 20OFFKINJALids son básicamente los calcetines de la cocina; siempre perdiéndose, dejando contenedores huérfanos que nunca podrán volver a cerrarse. Pero, ¿y si sus tapas pudieran estirarse y adaptarse a todos los recipientes, ollas, sartenes e incluso frutas en rodajas grandes que sobran? Nunca más tendrás que preocuparte por perder esa tapa tan específica.

Cuéntanos tus mejores trucos de Washington, DC

Cuéntanos tus mejores trucos de Washington, DC

Hemos pirateado algunas ciudades industriales en esta columna, como Los Ángeles y Las Vegas. Ahora es el momento de una ciudad militar-industrial-compleja.

Patinaje artístico de EE. UU. 'frustrado' por falta de decisión final en evento por equipos, pide una decisión justa

Patinaje artístico de EE. UU. 'frustrado' por falta de decisión final en evento por equipos, pide una decisión justa

El equipo está a la espera de las medallas que ganó en los Juegos Olímpicos de Invierno de 2022 en Beijing, ya que se está resolviendo un caso de dopaje que involucra a la patinadora artística rusa Kamila Valieva.

Los compradores de Amazon dicen que duermen 'como un bebé mimado' gracias a estas fundas de almohada de seda que cuestan tan solo $ 10

Los compradores de Amazon dicen que duermen 'como un bebé mimado' gracias a estas fundas de almohada de seda que cuestan tan solo $ 10

Miles de compradores de Amazon recomiendan la funda de almohada de seda Mulberry, y está a la venta en este momento. La funda de almohada de seda viene en varios colores y ayuda a mantener el cabello suave y la piel clara. Compre las fundas de almohada de seda mientras tienen hasta un 46 por ciento de descuento en Amazon

Se busca al corredor de los Bengals Joe Mixon por orden de arresto emitida por presuntamente apuntar con un arma de fuego a una mujer

Se busca al corredor de los Bengals Joe Mixon por orden de arresto emitida por presuntamente apuntar con un arma de fuego a una mujer

El jueves se presentó una denuncia de delito menor amenazante agravado contra Joe Mixon.

Profesor de la Universidad de Purdue arrestado por presuntamente traficar metanfetamina y proponer favores sexuales a mujeres

Profesor de la Universidad de Purdue arrestado por presuntamente traficar metanfetamina y proponer favores sexuales a mujeres

El Departamento de Policía de Lafayette comenzó a investigar a un profesor de la Universidad de Purdue en diciembre después de recibir varias denuncias de un "hombre sospechoso que se acercaba a una mujer".

Concept Drift: el mundo está cambiando demasiado rápido para la IA

Concept Drift: el mundo está cambiando demasiado rápido para la IA

Al igual que el mundo que nos rodea, el lenguaje siempre está cambiando. Mientras que en eras anteriores los cambios en el idioma ocurrían durante años o incluso décadas, ahora pueden ocurrir en cuestión de días o incluso horas.

India me está pateando el culo

India me está pateando el culo

Estoy de vuelta por primera vez en seis años. No puedo decirte cuánto tiempo he estado esperando esto.

ℝ

“And a river went out of Eden to water the garden, and from thence it was parted and became into four heads” Genesis 2:10. ? The heart is located in the middle of the thoracic cavity, pointing eastward.

¿Merrick Garland le ha fallado a Estados Unidos?

Es más de la mitad de la presidencia de Biden. ¿Qué está esperando Merrick Garland?

¿Merrick Garland le ha fallado a Estados Unidos?

Creo, un poco tarde en la vida, en dar oportunidades a la gente. Generosamente.

Language