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

PostgreSQL Discussion :

Petite question sur la fonction GROUP BY et consort


Sujet :

PostgreSQL

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Rien
    Inscrit en
    Août 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Rien

    Informations forums :
    Inscription : Août 2014
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Petite question sur la fonction GROUP BY et consort
    Bonjour, je tiens tout d'abord à signaler que je ne suis pas un expert en base de donnée, je fais des choses assez simple et qu'en plus je viens de MySQL ce qui n'aide en rien les mauvaises habitudes prises. J'ai donc un objectif assez simple à atteindre mais je but sur le problème depuis quelques jours. En fait je sais pertinemment que ce que j'essaye de faire ne pourra jamais fonctionner avec la fonction GROUP BY mais je préfère vérifier avant de faire n'importe quoi.

    Ma table (simplifié)

    ID CATEGORY TITLE DATE DOSSIER
    1 ROUGE TITRE 1 2011 1
    2 VERT TITRE 2 2014 1
    3 BLEU TITRE 3 2008 0
    4 ROUGE TITRE 4 2005 1
    5 ROSE TITRE 5 2003 0

    Mon but est de groupé les résultat de la colonne DOSSIER en omettant la valeur "0" et de faire un tri par date afin d'obtenir le résultat suivant :
    ID CATEGORY TITLE DATE DOSSIER
    1 ROUGE TITRE 1 2011 1
    2 VERT TITRE 2 2014 1


    Avec MySQL un simple SELECT * WHERE dossier=1 GROUP BY dossier ORDER BY date me permettait d'arriver à mon but mais sous PostgreSQL impossible puisque je ne peux pas le faire avec un SELECT * sous peine de devoir tout déclarer dans GROUP BY, jusque là j'ai bien compris.

    Mais comment dois-je procéder ? Désolé d'avance si ma question à déjà était posé ou si elle est complètement bête.

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    bonjour,

    sous mysql cette requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * WHERE dossier=1 GROUP BY dossier ORDER BY date

    aurait sélectionné une seule ligne.


    Pour arriver à votre résultat je suppose que vous essayez de faire un groupement par catégorie de dossier.


    l'approche group by ce fera de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    with tmp as (
    select category, max(date) as max_dte
    from ma_table 
    where dossier = 1
    group by category)
    select *
    from ma_table a
    inner join tmp on a.category = tmp.category and tmp.max_dte = a.date
    where dossier = 1

    une autre approche est d'utiliser une fonction de fenêtrage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    with tmp as (
    select id, category, titre, date, dossier, row_number() over(partition by category order by date desc) as rnk
    from ma_table 
    where dossier = 1
    )
    select *
    from tmp 
    where rnk = 1

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Rien
    Inscrit en
    Août 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Rien

    Informations forums :
    Inscription : Août 2014
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Ca marche du premier coup... j'ai le droit de dire que vous êtes un génie ?!! Merci beaucoup, je n'aurais jamais pu trouver tout seul je suis encore bien trop novice la dedans. Maintenant que je sais que ça fonctionne je vais décortiquer un peu cette requête pour comprendre comment ça fonctionne et pouvoir l'utiliser dans Rails, parce que je ne peux pas l'intégrer brut comme cela. Merci encore !!

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

Discussions similaires

  1. Petite question sur les return de fonction
    Par gueulederack dans le forum VB.NET
    Réponses: 5
    Dernier message: 04/11/2011, 17h56
  2. Petite question sur le typage des fonctions
    Par Dim Me As New Idiot dans le forum F#
    Réponses: 4
    Dernier message: 13/07/2010, 10h41
  3. Petite question sur les fonctions
    Par acacia dans le forum Mathématiques
    Réponses: 6
    Dernier message: 06/02/2009, 17h52
  4. [Visuel XP] Petite question sur le theme XP...
    Par ZoumZoumMan dans le forum C++Builder
    Réponses: 12
    Dernier message: 20/01/2005, 14h41
  5. Petite question sur les performances de Postgres ...
    Par cb44 dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 13/01/2004, 13h49

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