Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL Gruppieren nach und Gruppierung bei Nullwerten überspringen

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