IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Meilleur moyen de regrouper par mois


Sujet :

Langage SQL

  1. #1
    Modérateur
    Avatar de Gugelhupf
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Décembre 2011
    Messages
    1 320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 320
    Points : 3 741
    Points
    3 741
    Billets dans le blog
    12
    Par défaut Meilleur moyen de regrouper par mois
    Bonjour,

    En ce moment je dispose d'une table avec 3 colonnes :
    • date de type datetime (de 01/01/2000 à 01/07/2013)
    • categorie de type string
    • satisfaction de type string qui représente un "booléen" (si "Très heureux", alors 1, sinon 0).


    Je souhaiterais connaitre le taux de satisfaction par catégorie, pour chaque mois.

    Est-ce que la requête suivante est bien selon vous ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT
    to_char(date, 'YYYY-MM') annee_mois,
    categorie,
    ( SUM(CASE WHEN satisfaction = 'Très heureux' THEN 1.0 ELSE 0.0 END) / COUNT(*) ) * 100 AS taux
    FROM ma_table
    GROUP BY categorie, annee_mois
    ORDER BY categorie, annee_mois;
    Au passage je souhaiterais vous demander ce qu'il se passe si on remplace COUNT(*) par SUM(1), est-ce que c'est équivalent ?

    Je vous remercie pour votre aide , cordialement.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 099
    Points : 28 392
    Points
    28 392
    Par défaut
    Une légère correction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT
    TO_CHAR(date, 'YYYY-MM') annee_mois,
    categorie,
    (SUM(CASE satisfaction WHEN 'Très heureux' THEN 1.0 ELSE 0.0 END) * 100) / COUNT(*) AS taux
    FROM ma_table
    GROUP BY categorie, TO_CHAR(date, 'YYYY-MM') annee_mois
    ORDER BY categorie, TO_CHAR(date, 'YYYY-MM') annee_mois;

  3. #3
    Modérateur
    Avatar de Gugelhupf
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Décembre 2011
    Messages
    1 320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 320
    Points : 3 741
    Points
    3 741
    Billets dans le blog
    12
    Par défaut
    Bonjour Alain,

    Y a-t-il une différence entre :
    ( SUM(CASE WHEN satisfaction = 'Très heureux' THEN 1.0 ELSE 0.0 END) / COUNT(*) ) * 100 AS taux
    Et :
    (SUM(CASE satisfaction WHEN 'Très heureux' THEN 1.0 ELSE 0.0 END) * 100) / COUNT(*) AS taux
    ?

    Je n'ai pas compris pourquoi vous ajoutez les alias après la fonction dans le GROUP BY et ORDER BY.

    Sinon PostgreSQL accepte les alias dans le GROUP BY et ORDER BY.

    Merci.

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 099
    Points : 28 392
    Points
    28 392
    Par défaut
    En voyant TO_CHAR j'ai pensé que c'était de l'Oracle, qui n'accepte pas les alias dans les clauses GROUP BY et ORDER BY.
    Le forum Langage SQL étant générique, il est nécessaire de spécifier le SGBD utilisé.

    Pour la modification de l'ordre des opérations, certains SGBD opèrent des conversions de type dans les opérations arithmétiques et "perdent" des décimales au passage.

    Quant à l'ajout des alias après la fonction dans le GROUP BY et ORDER BY, c'est une erreur de copier-coller

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. créer une requête pour regrouper par mois
    Par kuhnden dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 26/01/2008, 13h41
  2. Regroupement par mois dans un état
    Par laurence1002 dans le forum IHM
    Réponses: 12
    Dernier message: 04/02/2007, 21h20
  3. Etat avec regroupement par mois
    Par auriolbeach dans le forum IHM
    Réponses: 2
    Dernier message: 17/07/2006, 03h24
  4. [Requête] Regroupement par mois en cours
    Par Burnout dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 09/01/2006, 09h36
  5. Regroupement par mois
    Par fplanglois dans le forum SQL
    Réponses: 7
    Dernier message: 29/07/2003, 16h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo