sql >> Databáze >  >> RDS >> Mysql

Seskupit MySQL podle a přeskočit seskupování na nulové hodnoty

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


  1. CakePHP - získat poslední spuštění dotazu

  2. Jak změnit heslo root MySQL na výchozí?

  3. Závažná chyba:Nelze použít objekt typu stdClass jako pole

  4. Jak nakonfigurovat AppArmor pro PostgreSQL a TimescaleDB