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

MySQL Raggruppa per e salta il raggruppamento su valori nulli

Se abbiamo una colonna univoca (o un insieme di colonne) nella tabella, possiamo aggiungere un'altra espressione a GROUP BY .

L'espressione deve restituire un valore univoco per ogni riga quando collection_id è zero. In caso contrario, restituisce una costante.

Supponendo di avere un id univoco colonna nella tabella, quindi possiamo fare qualcosa del genere:

... GROUP BY collection_id, IF(collection_id IS NULL, id, 0)

Quella seconda espressione nel GROUP BY restituisce un valore costante 0 quando collection_id non è nullo. Ma restituisce un valore univoco per ogni riga quando collection_id è null.

Nota che id qui è solo un riferimento a una colonna definita univoca all'interno della tabella. La CHIAVE PRIMARIA è un buon candidato. Se non disponiamo di un indice univoco su una singola colonna, possiamo ripetere questo stesso tipo di espressione per ogni colonna nel nostro vincolo univoco o per qualsiasi insieme di espressioni che è garantito essere univoco su ogni riga.

... GROUP BY collection_id
           , IF(collection_id IS NULL, col1, '')
           , IF(collection_id IS NULL, col2, NULL)
           , IF(collection_id IS NULL, col3, collection_id)

In alternativa, possiamo usare un'espressione genera un valore univoco:

... GROUP BY IFNULL(collection_id,UUID())