MySQL Group By Et Passez De Regroupement Sur Des Valeurs Null
select * from dc_deal group by collection_id
Dans collection_id colonne j'ai des valeurs (1,3,3,4,4,5,NULL,NULL). Au-dessus de la requête retourne des lignes avec (1,2,3,4,NULL) mais je veux sauter le regroupement NULLE valeur et la nécessité résultat comme (1,2,3,4,NULL,NULL)
Vous pouvez utiliser une union, d'abord regroupées sélectionnez contraint par
bon opnion, mais ont besoin d'encore plus efficace de la requête, j'ai besoin d'étendre filtre sur requête, même plus, de sorte que l'union va le rendre plus lent
à l'aide de l'union, je ne peux même pas l'ordre par started_date etc
Pourriez-vous montrer la structure de la table?
re: "à l'aide de l'union, je ne peux même pas l'ordre par started_date etc' - je n'ai pas vu
where collection_id is not null
et la deuxième, dissocié, une contrainte par where collection_id is null
bon opnion, mais ont besoin d'encore plus efficace de la requête, j'ai besoin d'étendre filtre sur requête, même plus, de sorte que l'union va le rendre plus lent
à l'aide de l'union, je ne peux même pas l'ordre par started_date etc
Pourriez-vous montrer la structure de la table?
re: "à l'aide de l'union, je ne peux même pas l'ordre par started_date etc' - je n'ai pas vu
started_date
dans votre requête ci-dessus. Je ne comprends pas vouloir poster votre requête en entier, mais au moins quelque chose qui exprime vraiment ce que vous voulez faire économise du temps tout le monde.
OriginalL'auteur Wasim A. | 2014-03-13
Vous devez vous connecter pour publier un commentaire.
Si nous avons une colonne unique (ou un ensemble de colonnes) dans le tableau, puis nous pouvons ajouter une autre expression de la
GROUP BY
.L'expression doit renvoyer une valeur unique pour chaque ligne lorsque
collection_id
est null. Sinon, elle retourne une constante.En supposant que nous avons un unique
id
colonne dans la table, alors nous pouvons faire quelque chose comme ceci:Que la seconde expression dans le
GROUP BY
renvoie une valeur constante0
quandcollection_id
n'est pas nulle. Mais elle renvoie une valeur unique pour chaque ligne lorsque collection_id est null.Noter que
id
ici est juste une référence à une colonne qui est défini pour être unique au sein de la table. La CLÉ PRIMAIRE est un bon candidat. Si nous n'avons pas un index unique sur une seule colonne, alors nous pouvons répéter ce même type d'expression pour chaque colonne dans notre contrainte unique, ou pour n'importe quel ensemble d'expressions qui est garanti pour être unique sur chaque ligne.Alternativement, on peut utiliser une expression génère une valeur unique:
Le
GROUP BY
article contient une liste séparée par des virgules des expressions. Vous pouvezGROUP BY
plus d'une colonne. Par exemple, vous pouvez "GROUP BY collection_id, purchase_year
", et récupérer les lignes qui ont le même collection_id sur plusieurs lignes, mais pour chaque valeur de collection_id, les valeurs de purchase_year sera différent. Le "truc" pour obtenir le résultat que vous voulez, c'est, pour utiliser une expression qui renvoie une unique ou valeur constante, en fonction d'une condition.IFNULL(collection_id, 0)
peut être plus court 🙂Oui, c'est vrai que
IFNULL(collection_id,0)
est une expression plus courte. Mais malheureusement, cette expression plus courte ne fournit pas d'aide au retour de l'spécifiée resultset. Afin de retourner le résultat de l'OP demande, nous avons besoin du retour d'un valeur UNIQUE sur chaque ligne oùcollection_id
est NULL. Donc, de retour d'une constante zéro en place d'une constante NULL n'aide pas.GROUPE PAR IFNULL(collection_id, UUID())
OriginalL'auteur spencer7593
Essayez ceci:
Remplacer
ID
avec une autre colonne de la table de groupe.Voir un exemple dans SQL Violon.
OriginalL'auteur Raging Bull
Essayez Ce Qui Suit :
sélectionnez * à partir de dc_deal où collection_id n'EST PAS NUll group by collection_id
MySQL SÉLECTIONNEZ uniquement pas les valeurs null
OriginalL'auteur Sagar