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

Quali campi di riga vengono restituiti durante il raggruppamento con MySQL?

Quale ID verrà restituito ( 1, 2 o 3 )?

R:Il server sceglierà per tutti i record che hanno lo stesso nome l'ID desiderato (molto probabilmente il più veloce da recuperare, il che è imprevedibile). Per citare la documentazione ufficiale:

Molte più informazioni in questo link .

Quale ID sta per inviare questa query a ORDER BY (come viene restituito? ... vedi domanda 1)?

Non ha senso scoprire in quale ordine verranno restituiti i dati recuperati poiché non è possibile prevedere il risultato che otterrai. Tuttavia, è molto probabile che il risultato venga ordinato in base alla colonna ID imprevedibile.

Puoi controllare quale ID viene restituito/utilizzato per l'ordine? per esempio. Restituisce l'ID più grande o il primo ID di un GRUPPO.

Dovresti presumere a questo punto che non puoi. Rileggi la documentazione.

Rendere le cose ancora più chiare:non è possibile prevedere il risultato di una clausola GROUP BY utilizzata in modo improprio. Il problema principale con MySQL è che ti consente di usarlo in un modo non standard, ma devi sapere come utilizzare quella funzionalità. Il punto principale dietro è raggruppare per campi che sai saranno sempre gli stessi. ES:

SELECT id, name, COUNT( * ) AS frequency
FROM table
GROUP BY id

Qui conosci name sarà univoco come id determina funzionalmente name . Quindi il risultato che conosci è valido. Se raggruppassi anche per nome questa query sarebbe più standard ma funzionerà leggermente peggio in MySQL.

Come nota finale, tieni presente che, nella mia esperienza, i risultati in quelle query non standard per i campi selezionati e non raggruppati sono solitamente quelli che otterresti applicando un GROUP BY e poi un ORDER BY su quel campo. Ecco perché così tante volte sembra lavorare. Tuttavia, se continui a testare, alla fine scoprirai che ciò accade il 95% delle volte. E non puoi fare affidamento su quel numero.