Mysql
 sql >> Database >  >> RDS >> Mysql

Quali sono i vantaggi della modalità only_full_group_by?

only_full_group_by =su dice al motore MySQL:non applicare GROUP BY quando hai dubbi su quali risultati mostrare e genera un errore. Solo applicalo se Group By ti dice specificamente cosa fare. cioè quando il Group By è pieno e perfetto!

only_full_group_by =disattivato dice al motore MySQL:applica sempre GROUP BY e se hai dubbi su quali risultati scegliere, scegline uno a caso!

Non è necessario disattivarlo se utilizzi GROUP BY correttamente!

Esempio:

Tabella:utenti

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

Quando usi GROUP BY sul name colonna:

SELECT * FROM users GROUP BY name;

Ci sono due possibili risultati:

  1      ali
  2      john     

O

  2      john     
  3      ali

MySQL non sa quale risultato scegliere! Perché ci sono diversi id s ma entrambi hanno name=ali .

Soluzione1:

selezionando solo il name campo:

SELECT name FROM users GROUP BY name;

risultato:

  ali
  john     

Questa è una soluzione perfetta. rimuovendo le colonne che rendono GROUP BY confuso. Questo significa che sai cosa stai facendo. Di solito non hai bisogno di
quelle colonne, ma se ne hai bisogno, vai a Solution3 !

Soluzione2:

Disattivazione di only_full_group_by . MYSQL sceglierà uno dei due possibili risultati RANDOMLY !! (Va bene se non ti interessa davvero quale id sceglierà, ma ricorda di attivarlo subito dopo la tua richiesta per prevenire comportamenti imprevisti in future groupBy)

Soluzione3

Usa un Aggregate funzione come MIN() , MAX() per aiutare MySQL a decidere cosa deve scegliere.

Ad esempio:

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

risultato:

  2      john     
  3      ali

Sceglierà il ali riga che ha il massimo id .