Wenn wir eine eindeutige Spalte (oder einen Satz von Spalten) in der Tabelle haben, können wir einen weiteren Ausdruck zu GROUP BY
hinzufügen .
Der Ausdruck muss für jede Zeile einen eindeutigen Wert zurückgeben, wenn collection_id
ist Null. Andernfalls wird eine Konstante zurückgegeben.
Angenommen, wir haben eine eindeutige id
Spalte in der Tabelle, dann können wir so etwas tun:
... GROUP BY collection_id, IF(collection_id IS NULL, id, 0)
Dieser zweite Ausdruck in GROUP BY
gibt einen konstanten Wert 0
zurück wenn collection_id
ist nicht null. Aber es gibt einen eindeutigen Wert für jede Zeile zurück, wenn collection_id null ist.
Beachten Sie die id
hier ist nur ein Verweis auf eine Spalte, die innerhalb der Tabelle als eindeutig definiert ist. Der PRIMARY KEY ist ein guter Kandidat. Wenn wir keinen eindeutigen Index für eine einzelne Spalte haben, können wir denselben Ausdruckstyp für jede Spalte in unserer Eindeutigkeitsbeschränkung oder für jeden Satz von Ausdrücken wiederholen, der garantiert in jeder Zeile eindeutig ist.
... 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)
Alternativ können wir einen Ausdruck verwenden, der einen eindeutigen Wert generiert:
... GROUP BY IFNULL(collection_id,UUID())