Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
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 06/12/2011, 23h20   #1
Invité de passage
 
Inscription : février 2008
Messages : 27
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 27
Points : 0
Points : 0
Par défaut Problème count Join group by

Bonjour


J'ai une requête qui fait une jointure en 2 tables (Operateur, Operations )
et mon but est de sélectionner tous les champs de l’opérateur et le nombre d’opérations de chaque opérateur.

J'ai essayé plusieurs possibilités mais ça ne marche pas.
Quelqu'un aurait-il une idée ou une solution pour cette requête ?
Code :
1
2
3
4
  SELECT COUNT(n.lib_operation) AS "nombre d'operation", r.*,
    FROM Operateur AS r INNER JOIN
         Operation AS n ON r.id_oper = n.id_oper
GROUP BY r.id_oper
Merci
casa_sniper est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 07/12/2011, 08h54   #2
Membre chevronné
 
Avatar de pinocchio
 
Homme François
Développeur informatique
Inscription : novembre 2002
Messages : 773
Détails du profil
Informations personnelles :
Nom : Homme François
Âge : 35
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Service public

Informations forums :
Inscription : novembre 2002
Messages : 773
Points : 787
Points : 787
Lorsque tu fais un group by, tu rassembles les données et donc logiquement, tu ne retrouves pas toutes les lignes à l'identique.
Tu peux cependant faire une requête de type :
Code :
1
2
3
4
5
 
SELECT n2.nb_ope, r.*
FROM Operateur r INNER JOIN
Operation n ON r.id_oper = n.id_oper
INNER JOIN (SELECT id_oper, count(id_ope) nb_oper FROM Operation GROUP BY id_oper) n2 ON n2.id_oper=r.id_oper
Cordialement
__________________
La SNCF est mon ami
blog PARIS-GRANVILLE
Inscription au panel IPSOS (possibilité d'avoir des bons d'achats)
pinocchio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2011, 09h58   #3
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 686
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 686
Points : 10 435
Points : 10 435
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Toutes les colonnes non-agrégées du SELECT doivent se retrouver dans le GROUP BY.
On ne fait pas de "select *", on prend son courage à deux mains et on écrit toutes les colonnes qui nous intéressent (la plupart des outils graphique le font en un simple glisser / déposer).

Donc votre requête devient :
Code :
1
2
3
4
  SELECT COUNT(n.lib_operation) AS "nombre d'operation", <les colonnes de la TABLE Operateur>,
    FROM Operateur AS r INNER JOIN
         Operation AS n ON r.id_oper = n.id_oper
GROUP BY <les colonnes de la TABLE Operateur>
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2011, 15h14   #4
Invité de passage
 
Inscription : février 2008
Messages : 27
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 27
Points : 0
Points : 0
Merci beaucoup pour vos réponses
ça ma parfaitement votre requête pinocchio
@Waldar: je l'ai essayé , mais sur group by je pense que oracle n'accepte pas les champs de type text
casa_sniper est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2011, 15h35   #5
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 686
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 686
Points : 10 435
Points : 10 435
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Text, c'est LONG / LOB j'imagine.
En effet, il y a des limitations.
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2011, 12h21   #6
Membre Expert
 
Inscription : août 2009
Messages : 779
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 779
Points : 1 098
Points : 1 098
À noter qu'on peut aussi demander un count comme ceci :

Code :
1
2
3
4
5
 
  SELECT COUNT(n.lib_operation) over (partition BY r.id_oper) AS "nombre d'operation"
            ,<les_autres_champs>
    FROM Operateur AS r INNER JOIN
         Operation AS n ON r.id_oper = n.id_oper
Rei Ichido 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 22h04.


 
 
 
 
Partenaires

Hébergement Web