comment faire 1 somme totale de sommes en 1 requete SQL?

comment faire 1 somme totale de sommes en 1 requete SQL? - SQL/NoSQL - Programmation

Marsh Posté le 07-09-2006 à 16:48:23    

voici les tables
STAGIAIRES : IDSTAG
CONTRATS : IDCONTRAT,IDSTAG
 
 
je voudrais faire , en resumé pour faire simple, pour chaque stagiaire je compte le nombre de contrats qu'il a, et avoir le total de ces sommes ensuite.
donc imaginons que tous mes stagiaires ont 2 contrats et qu'il y a 5 stagaires, je devrais avoir en resultat 10.
mais je ne vois pas comment faire ça.. !donc je viens voir par ici pour avoir un peu d'aide !

Reply

Marsh Posté le 07-09-2006 à 16:48:23   

Reply

Marsh Posté le 07-09-2006 à 16:54:19    

Rollup powwwa :D

Code :
  1. select s.idstag, count(c.idstag) from stagiaires s inner join contrats c on c.idstag = s.idstag group by rollup(s.idstag)

Reply

Marsh Posté le 07-09-2006 à 17:09:44    

merci !
mais j'utilise une base firebird et a priori ça ne marche pas, il comprend pas le rollup  :??:

Reply

Marsh Posté le 07-09-2006 à 17:27:15    

je trouve ca original:

Code :
  1. select C1.idstag,count(*)
  2. from CONTRATS C1
  3. group by C1.idstag
  4. UNION
  5. select 'Total',count(*)
  6. from CONTRATS C2

Message cité 1 fois
Message édité par betsamee le 07-09-2006 à 17:27:42
Reply

Marsh Posté le 07-09-2006 à 17:40:44    

original mais efficace :jap:


Message édité par anapajari le 07-09-2006 à 17:41:18
Reply

Marsh Posté le 08-09-2006 à 10:12:39    

je ne comprends pas trop le 'total', il fait reference a quoi dans ta requete betsamee ?

Reply

Marsh Posté le 08-09-2006 à 10:16:51    

il ecrit simplement total dans le champ a cote du total et ceci afin que l union fonctionne

Reply

Marsh Posté le 08-09-2006 à 14:13:15    

il me renvoi une erreur 'datatype unknow'

Reply

Marsh Posté le 08-09-2006 à 14:21:47    

en je voudrai qu'il fasse une sorte de distinct, qu'1 stagiaire ai 1 ou plusieurs contrat je voudrai qu'il ne soit compté qu'une seule fois.

Reply

Marsh Posté le 08-09-2006 à 14:30:16    

bin c'est ce que doit faire ton group by :??:
Quel sgbd tu utilises?
Quelle est l'erreur complète renvoyé par la requête de betsamee? Car celle-ci doit être correcte ( seul pb, le premier champ remonté n'est pas du même type dans les deux requêtes de l'union, tu seras ptêt obligé de faire un cast en string de ton idstag)

Reply

Marsh Posté le 08-09-2006 à 14:30:16   

Reply

Marsh Posté le 08-09-2006 à 14:48:37    

betsamee a écrit :

je trouve ca original:

Code :
  1. select C1.idstag,count(*)
  2. from CONTRATS C1
  3. group by C1.idstag
  4. UNION
  5. select 'Total',count(*)
  6. from CONTRATS C2



 
UNION ALL pour éviter un tri inutile :)
 
Sinon, sous Oracle tu peux utiliser SUM (*) OVER ()

Reply

Marsh Posté le 08-09-2006 à 14:54:07    

si ça avait été oracle, rollup aurait marché , non :??:
remarque ça doit dépendre de la version ...

Reply

Marsh Posté le 08-09-2006 à 15:19:31    

anapajari a écrit :

bin c'est ce que doit faire ton group by :??:
Quel sgbd tu utilises?
Quelle est l'erreur complète renvoyé par la requête de betsamee? Car celle-ci doit être correcte ( seul pb, le premier champ remonté n'est pas du même type dans les deux requêtes de l'union, tu seras ptêt obligé de faire un cast en string de ton idstag)


ah voila je pense que le probleme est la.je vais essayer de voir comment ça marche le cast car je connais pas..merci!
c'est une base Firebird 1.5
d'apres ce que j'ai lu le rollup devrait marcher sur la 2.0 mais elle est encore en beta il me semble et n'est pas installée sur le serveur de prod pour le moment


Message édité par albertos le 08-09-2006 à 15:21:04
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed