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())