Mysql
 sql >> Base de données >  >> RDS >> Mysql

Grouper MySQL par et ignorer le regroupement sur les valeurs nulles

Si nous avons une colonne unique (ou un ensemble de colonnes) dans la table, nous pouvons ajouter une autre expression au GROUP BY .

L'expression doit renvoyer une valeur unique pour chaque ligne lorsque collection_id est nul. Sinon, il renvoie une constante.

En supposant que nous ayons un id unique colonne dans le tableau, alors nous pouvons faire quelque chose comme ceci :

... GROUP BY collection_id, IF(collection_id IS NULL, id, 0)

Cette deuxième expression dans le GROUP BY renvoie une valeur constante 0 quand collection_id est non nulle. Mais il renvoie une valeur unique pour chaque ligne lorsque collection_id est null.

Notez que id voici juste une référence à une colonne qui est définie comme étant unique dans la table. La CLE PRIMAIRE est un bon candidat. Si nous n'avons pas d'index unique sur une seule colonne, nous pouvons répéter ce même type d'expression pour chaque colonne dans notre contrainte unique, ou pour tout ensemble d'expressions dont l'unicité est garantie sur chaque ligne.

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

Alternativement, nous pouvons utiliser une expression qui génère une valeur unique :

... GROUP BY IFNULL(collection_id,UUID())