Pokud máme v tabulce jedinečný sloupec (nebo sadu sloupců), můžeme do GROUP BY
přidat další výraz .
Výraz musí vracet jedinečnou hodnotu pro každý řádek při collection_id
je nulový. V opačném případě vrací konstantu.
Za předpokladu, že máme jedinečné id
sloupec v tabulce, pak můžeme udělat něco takového:
... GROUP BY collection_id, IF(collection_id IS NULL, id, 0)
Tento druhý výraz v GROUP BY
vrací konstantní hodnotu 0
když collection_id
není nulový. Ale vrací jedinečnou hodnotu pro každý řádek, když je collection_id null.
Všimněte si, že id
zde je pouze odkaz na sloupec, který je definován jako jedinečný v rámci tabulky. PRIMÁRNÍ KLÍČ je dobrý kandidát. Pokud nemáme jedinečný index na jednom sloupci, můžeme stejný typ výrazu zopakovat pro každý sloupec v našem jedinečném omezení nebo pro jakoukoli sadu výrazů, u kterých je zaručeno, že budou jedinečné na každém řádku.
... 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)
Případně můžeme použít výraz generující jedinečnou hodnotu:
... GROUP BY IFNULL(collection_id,UUID())