Jeśli mamy unikalną kolumnę (lub zestaw kolumn) w tabeli, możemy dodać kolejne wyrażenie do GROUP BY
.
Wyrażenie musi zwracać unikalną wartość dla każdego wiersza, gdy collection_id
nie ma wartości. W przeciwnym razie zwraca stałą.
Zakładając, że mamy unikalny id
kolumny w tabeli, wtedy możemy zrobić coś takiego:
... GROUP BY collection_id, IF(collection_id IS NULL, id, 0)
Drugie wyrażenie w GROUP BY
zwraca stałą wartość 0
kiedy collection_id
nie jest pusta. Ale zwraca unikatową wartość dla każdego wiersza, gdy collection_id ma wartość null.
Zauważ, że id
tutaj jest tylko odwołanie do kolumny, która jest zdefiniowana jako unikalna w tabeli. KLUCZ PODSTAWOWY jest dobrym kandydatem. Jeśli nie mamy unikalnego indeksu w pojedynczej kolumnie, możemy powtórzyć ten sam typ wyrażenia dla każdej kolumny w naszym ograniczeniu niepowtarzalności lub dla dowolnego zestawu wyrażeń, który gwarantuje unikalność w każdym wierszu.
... 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)
Alternatywnie możemy użyć wyrażenia generującego unikalną wartość:
... GROUP BY IFNULL(collection_id,UUID())