Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL > Requêtes
Requêtes Forum d'entraide sur les requêtes SQL spécifiques à PostgreSQL, les triggers, les vues, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/11/2011, 23h22   #1
Nouveau Membre du Club
 
Homme Omar Belghiti Alaoui
Étudiant
Inscription : octobre 2010
Messages : 100
Détails du profil
Informations personnelles :
Nom : Homme Omar Belghiti Alaoui
Localisation : France, Seine Maritime (Haute Normandie)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2010
Messages : 100
Points : 36
Points : 36
Par défaut Quelques lignes me manquent dans le résultat de ma requête...

Bonjour,

Voici ma Base de donnés:
table.jpg

Voici la Question:
- Donner le nombre de bonus offensif par équipe. ( sachant que bonus offensif c'est le nombre de matchs où nat_essai >= 4 )

Voici ce que j'ai fait j'ai pu récupérer le nombre de bonus offensifs pour chaque équipe mais les équipes qui ont le bonus offensif 0 ne s'affichent pas si vous pouvez me guider.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
SELECT 
  nation.nat_nom,
  COUNT(joue.nat_essai) AS PB
FROM 
  public.joue
  INNER JOIN public.match ON  joue.mat_id = match.mat_id
  INNER JOIN public.nation ON  joue.nat_id = nation.nat_id
WHERE
  joue.nat_essai >= 4
GROUP BY
  nation.nat_nom
ORDER BY
  nation.nat_nom
  ;
NB: J'ai pensé à PL/PgSQL pour faire les conditions pour afficher aussi ceux qui ont 0 comme point offensif mais je ne sais pas si ça vaut la peine vu que je n'ai jamais utilisé mais si il faut le faire en PL/PgSQL je vais me pencher dessus

Merci.
newbe-deve est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2011, 23h49   #2
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 928
Points : 1 928
Tu filtres (le WHERE) sur les équipes ayant marquées plus de 4 essais, donc impossible d'afficher les autres.
Essaie en conditionnant le COUNT :
Code :
1
2
3
4
5
6
7
8
9
10
11
SELECT 
  nation.nat_nom,
  sum(case when joue.nat_essai >= 4 then 1 else 0 end) AS PB
FROM 
  public.joue
  INNER JOIN public.match ON  joue.mat_id = match.mat_id
  INNER JOIN public.nation ON  joue.nat_id = nation.nat_id
GROUP BY
  nation.nat_nom
ORDER BY
  nation.nat_nom
Je l'ai transormé en SUM parce que je trouve SUM plus intuitif dans ce cas mais COUNT donnera le même résultat.
En gros ça dit :
SI joue.nat_essai >= 4
ALORS pb ++
FIN SI
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 25/11/2011, 00h47   #3
Nouveau Membre du Club
 
Homme Omar Belghiti Alaoui
Étudiant
Inscription : octobre 2010
Messages : 100
Détails du profil
Informations personnelles :
Nom : Homme Omar Belghiti Alaoui
Localisation : France, Seine Maritime (Haute Normandie)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2010
Messages : 100
Points : 36
Points : 36
Merci pour votre réponse ça va me permettre de répondre au prochaine Question Mais je veux juste savoir si j'ai bien compris, si je veux faire :

if (attribut 1 < attribut 2) then 1 <=> case when attribut1 < attribut 2 then 1 else 0 end

J’espère que je me suis pas trompé

Merci
newbe-deve est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2011, 09h25   #4
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 928
Points : 1 928
C'est ça, le ELSE 0 est facultatif.
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2011, 12h27   #5
Modérateur
 
Inscription : octobre 2008
Messages : 1 508
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2008
Messages : 1 508
Points : 2 040
Points : 2 040
Citation:
Envoyé par skuatamad Voir le message
Je l'ai transormé en SUM parce que je trouve SUM plus intuitif dans ce cas mais COUNT donnera le même résultat.
Non le COUNT avec le CASE donnerait un résultat faux puisqu'il compterait les 0 comme les 1 sans faire aucune différence entre les deux.
estofilo est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 25/11/2011, 15h37   #6
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 928
Points : 1 928
Ah exact je mets jamais le ELSE normalement donc avec ELSE NULL (ce qui revient à ne pas mettre le ELSE) ça donnera le même résultat.
Merci pour la correction
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h53.


 
 
 
 
Partenaires

Hébergement Web