Vous n'êtes pas identifié(e).
Pages : 1
Bonjour @ tous.
Je viens de réaliser une requête suffisamment simple pour me donner le résultat escompté au seul problème que je n'ai pas les résultats agrégés sur une seule ligne, je m'explique.
Je tente d'avoir pour une commune de départ, une commune d'arrivée, le nombre d'homme et le nombre de femmes (en tout 4 colonnes + identifiant unique). Je fais donc ma requête :
SELECT DISTINCT row_number() OVER () AS id_unique, commune_depart AS depart, commune_arrivee AS arrivee,
CASE
WHEN sexe = 1 THEN sum(nb)
END AS homme,
CASE
WHEN sexe = 2 THEN sum(nb)
END AS femme
FROM flux
GROUP BY commune_depart, commune_arrivee,sexe
Mais en résultat j'ai :
id_unique depart arrivee homme femme
1 Alfrome Alfrime 16
2 Alfrome Alfrime 32
Bien sur, ce que je voudrais, et vous l'aurez deviné c'est :
id_unique depart arrivee homme femme
1 Alfrome Alfrime 16 32
Est-ce que vous auriez une idée d'utilisation du GROUP BY avec un CASE ?
Par avance merci de votre aide.
Geo-x
Hors ligne
Pourquoi avoir ajouter la colonne sexe dans le GROUP BY ? vous ne voulez regrouper que par commune_depart et commune_arrivee.
Guillaume.
Hors ligne
Bonjour Gleu.
Je suis bien d’accord avec vous, et je ne souhaite pas faire de GROUP BY sur la colonne sexe, mais si je ne le met pas, postgres me fâche :
ERROR: column "mobpro2011.sexe" must appear in the GROUP BY clause or be used in an aggregate function
LINE 5: WHEN sexe = 1 THEN sum(nb)
Hors ligne
Oui, logique. Donc il faut la coller dans la fonction d'agrégat :
SELECT DISTINCT row_number() OVER () AS id_unique, commune_depart AS depart, commune_arrivee AS arrivee,
sum(CASE
WHEN sexe = 1 THEN nb
ELSE 0
END) AS homme,
sum(CASE
WHEN sexe = 2 THEN nb
ELSE 0
END) AS femme
FROM flux
GROUP BY commune_depart, commune_arrivee
Guillaume.
Hors ligne
Bonjour Gleu,
Je ne connaissais pas du tout cette syntaxe et j'avoue qu'elle ne m'avait jamais traversé l'esprit jusqu'à aujourd'hui ;-)
En tout cas, ça marche parfaitement, un grand merci à vous.
Hors ligne
Pages : 1