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

Requêtes PostgreSQL Discussion :

Faire un sum des N plus grosses quantités avec group by [8.4]


Sujet :

Requêtes PostgreSQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 46
    Points : 47
    Points
    47
    Par défaut Faire un sum des N plus grosses quantités avec group by
    Bonjour,

    Voici mon dataset:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    cfr;espece;quantite
    "FRA000242502";""CET"";"186.8"
    "FRA000242502";""CET"";"9.49"
    "FRA000242502";""CRE"";"14.7"
    "FRA000242502";""CTC"";"3.2"
    "FRA000242502";""FLX"";"0.04"
    "FRA000242502";""FLX"";"0.8"
    "FRA000242502";""GAD"";"0.13"
    "FRA000242502";""GAD"";"2.6"
    "FRA000242502";""HKE"";"0.47"
    "FRA000242502";""HKE"";"9.21"
    "FRA000242502";""LIO"";"6.5"
    "FRA000242502";""SOL"";"0.26"
    "FRA000242502";""SOL"";"5.2"
    1) Je cherche à faire dans une requête la somme totale des quantités toutes espèces confondues group by cfr, ça c'est bon.
    2) + la somme totale de l'espèce HKE group by cfr, ok également.
    3) ** la somme totale des 5 premières espèces les plus capturées (donc avec le plus de quantité)

    Voici mon début de requête qui marche pour les deux premiers points:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    select 
    	cfr, 
    	SUM(CAST(quantite AS decimal)) as total_captures_kg,
    	COALESCE(SUM(CASE WHEN (espece = '"HKE"') THEN CAST(quantite AS decimal) END), 0) as total_hke_captures_kg
    	--TODO somme totale des N premières espèces les plus capturées donc TOP N MAX group by ??
    from table_2013
    group by cfr;
    Merci je rame...

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Vous pouvez faire comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    SELECT 
    	cfr,
    	SUM(total_captures_kg) as total_captures_kg,
    	SUM(total_hke_captures_kg) as total_hke_captures_kg,
    	SUM(CASE WHEN Rn <= 5 THEN total_captures_kg ELSE 0 END) as Top5Capture
    FROM (
     
    	select 
    		cfr, 
    		SUM(CAST(quantite AS decimal)) as total_captures_kg,
    		COALESCE(SUM(CASE WHEN (espece = 'HKE') THEN CAST(quantite AS decimal) END), 0) as total_hke_captures_kg,
    		ROW_NUMBER() OVER (PARTITION BY cfr ORDER BY SUM(CAST(quantite AS decimal))  DESC) AS rn
    	from table_2013
    	group by cfr, espece
    ) T
    GROUP BY cfr;
    A adapter éventuellement pour traiter les cas de doublon au classement.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 46
    Points : 47
    Points
    47
    Par défaut
    J'ai du le faire avec des tables temporaires, votre solution est la plus rapide, merci.

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

Discussions similaires

  1. Récupérer les plus grandes valeurs avec group by
    Par mysticpete dans le forum Doctrine2
    Réponses: 2
    Dernier message: 24/04/2013, 15h09
  2. Réponses: 2
    Dernier message: 29/11/2010, 10h09
  3. case tableau: comment faire des hauteurs plus petites que 23px
    Par cortex024 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 28/11/2006, 17h01
  4. Réponses: 4
    Dernier message: 14/10/2005, 14h02
  5. comment faire pour developper des prog en win32
    Par rhodan51 dans le forum Autres éditeurs
    Réponses: 11
    Dernier message: 09/11/2003, 19h39

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