GROUPE PAR ne pas le groupe NULL

J'essaie de trouver un moyen de renvoyer les résultats à l'aide de groupe par fonction.

GROUPE PAR fonctionne comme prévu, mais ma question est: Est-il possible d'avoir un groupe par ignorer champ NUL. De sorte qu'il ne regroupe pas les valeurs Null, ensemble, parce que j'ai encore besoin de toutes les lignes où le champ est NULL.

SELECT `table1`.*, 
    GROUP_CONCAT(id SEPARATOR ',') AS `children_ids`
FROM `table1` 
WHERE (enabled = 1) 
GROUP BY `ancestor` 

Alors maintenant, disons que j'ai 5 lignes et ancêtre champ est NULL, il me renvoie 1 ligne....mais je veux que tous les 5.

  • Pourriez-vous poster un exemple?
  • Vous pouvez utiliser GROUP BY COALESCE(GroupingColumn, PrimaryKey) pourraient avoir besoin d'un ajustement pour les types de données, composite PKs ou quoi que ce soit.
  • OK, apparemment, "ce comportement est défini dans le SQL-2003 standard." Surprenant.
  • Geret'kal: Joe Celko citation: "En SQL, quand tu fais un GROUP BY, vous obtenez un partitionnement, et les valeurs Null sont tous mis dans un groupe. Cela a été débattu dans les normes ANSI X3H2 Comité. Si nous avions utilisé une stricte égalité, chaque NULL serait sa propre classe et des choses serait un gâchis. Donc nous avons inventé le regroupement. Le groupement est pratique pour de nombreuses requêtes et pas seulement pour les fonctions d'agrégation. Il a la belle propriété de plus de revenir à deux valeurs logiques (2VL) et on aime ça."
  • Suggestion: supprimer les lignes WHERE ancestor is NOT NULL puis UNION les lignes WHERE ancestor is NULL en utilisant une valeur par défaut appropriée pour children_ids. Je pense que cette requête serait plus facile à maintenir.
  • C'est une bonne idée.
  • Utilisez une combinaison de l'incrément automatique de clé primaire avec une lettre. N1, N2, N3

InformationsquelleAutor slik | 2011-01-03