L’errore: SELECT list is not in GROUP BY clause and contains nonaggregated column si manifesta nellaversione MySql 5.7 in base alle impostazioni di modalità di esecuzione del server di Database MySql che opera in STRICT_MODE ed in questo particolare caso anche in only_full_group_by, mentre le versioni precedenti erano impostate di default diciamo in una modalità più elastica o permissiva se preferisci.
Sovente con questo errore si è soliti ricevere anche il messaggio: in aggregated query without group by expression #2 of select list contains nonaggregated column che ti sta dicendo che nella clausola GROUP BY della tua SELECT contiene una (o più) colonna (campo) che non è adatta ad essere trattata come tipo aggregato.
Per risolvere questo problema devi aggiungere o rimuovere alla tua GROUP BY tutte quelle colonne previste nella SELECT di tipo aggregato, proprio perché Mysql per come impostato lavora in modalità only_full_group_by.
Oppure devi andare nelle impostazioni avanzate di MySql e cambiare la modalità di esecuzione settando:
set global sql_mode=''
a livello globale, oppure per singola sessione (lanciando la seguente query prima della SELECT) in questo modo:
set session sql_mode=''
in questo modo disabiliterai la modalità STRICT (applicata anche su altri elementi) ed anche la ONLY FULL GROUP BY.
———————————————————————————–
As of MySQL 5.7.5, the default SQL mode includes ONLY_FULL_GROUP_BY which means when you are grouping rows and then selecting something out of that groups, you need to explicitly say which row should that selection be made from.
SELECT name, ANY_VALUE(address), MAX(age) FROM t GROUP BY name; -- works
Questa voce