Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2241 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL - ORACLE] Faire un somme de count sur plusieurs tables

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[SQL - ORACLE] Faire un somme de count sur plusieurs tables

n°1161147
Worldofdad​a
Posté le 27-07-2005 à 10:21:43  profilanswer
 

Bonjour
 
Je cherche a faire la somme des enregistrements de plusieurs tables qui n'ont pas de liens ... et ça, en 1 seule requete.
C'est à dire que si une table contient 2 enregistrements, et la 2eme en contient 1, je dois avoir 3 comme résultat.
Pour info, j'ai 4 tables concernées
 
J'ai testé des méthodes proches de celles ci mais je n'arrive pas a le faire fonctionner (j'ai mis que 2 tables pour simplifier) :  

Code :
  1. SELECT SUM(a)
  2. FROM (SELECT 1 AS a FROM ... WHERE ....)
  3. UNION (SELECT 1 AS a FROM ... WHERE ...);


 
Quelqu'un a t'il une idée ?
 
Merci beaucoup
Worldofdada

mood
Publicité
Posté le 27-07-2005 à 10:21:43  profilanswer
 

n°1161153
skeye
Posté le 27-07-2005 à 10:24:52  profilanswer
 

Simple erreur de parenthèses, non?
 
select sum(a)
from  
(
select truc as a from chose where brol = chouette
union
select bidule as a from machin where pomme = poire
)
 
:??:
 
[edit]
 
Je viens de relire la question...ceci doit très bien faire l'affaire :
 
select count(*)
from (
select 1 from chose where brol = chouette
union
select 1 from machin where pomme = poire
)


Message édité par skeye le 27-07-2005 à 10:28:12

---------------
Can't buy what I want because it's free -
n°1161174
Worldofdad​a
Posté le 27-07-2005 à 10:38:03  profilanswer
 

Merci pour ta réponse mais ... je viens de tester et ca ne fonctionne pas.
 
En reprennant ton exemple, si j'ai 4 choses et 0 machins (exactement les nombres que j'ai avec mes requetes), le count(*) me retourne 1 ...

n°1161190
skeye
Posté le 27-07-2005 à 10:43:09  profilanswer
 

Worldofdada a écrit :

Merci pour ta réponse mais ... je viens de tester et ca ne fonctionne pas.
 
En reprennant ton exemple, si j'ai 4 choses et 0 machins (exactement les nombres que j'ai avec mes requetes), le count(*) me retourne 1 ...


 
ah merde, l'union doit virer les doublons...[:joce]
 
dans ce cas un truc de ce style devrai fonctionner :
 
select count(*)
from (
select 'chose' as table, id_chose as id from chose where brol = chouette
union
select 'machin' as table, id_machin as id from machin where pomme = poire
)


---------------
Can't buy what I want because it's free -
n°1161216
Arjuna
Aircraft Ident.: F-MBSD
Posté le 27-07-2005 à 10:55:05  profilanswer
 

ho les gorets :o
 
-> Bon, déjà, les sous-requêtes, il faut toujours qu'elles retournent un MINIMUM de lignes, donc je ne veux voir que des COUNT() dedans.
-> Un UNION sur une donnée calculée, c'est pas une bonne idée, car il fait un distinct implicit. En plus, c'est lent. (ça l'est d'autant plus avec vos "select 1 from" parceque le union final ne retourne qu'une seule ligne, et ça a mis 3 plombes à la trouver...)
 
Bon, la solution qui marche et qui est rapide :
 

Code :
  1. select sum(val)
  2. from (
  3.   select count(*) val from a
  4.   union all
  5.   select count(*) val from b
  6.   union all
  7.   select count(*) val from c
  8.   union all
  9.   select count(*) val from d
  10. )


 
Et voilà.


Message édité par Arjuna le 27-07-2005 à 10:57:28
n°1161221
skeye
Posté le 27-07-2005 à 10:57:44  profilanswer
 

me rappelais plus de 'union all' ([:joce])...c'est valable partout?


---------------
Can't buy what I want because it's free -
n°1161224
Arjuna
Aircraft Ident.: F-MBSD
Posté le 27-07-2005 à 11:02:33  profilanswer
 

normalement, oui, en tout cas SQL Server, Oralce, Access, MySQL et POostGre le supportent (testé par mes soins :D)

n°1161225
Worldofdad​a
Posté le 27-07-2005 à 11:02:56  profilanswer
 

Merci beaucoup
 
Ca marche niquel !
J'étais pas loin du résultat final mais heureusement que t'es passé pour me signaler le UNION ALL car sinon j'aurais eu des problèmes plus tard lors de doublons de données sans comprendre le soucis ...
 
Merci beaucoup a tous ceux qui ont répondus  ;)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL - ORACLE] Faire un somme de count sur plusieurs tables

 

Sujets relatifs
Tentative de mini-bench comparant MySQL et SQL Serverplusieurs count(*) avec plusieurs WHERE avec des if
Requete sur deux tablesAmélioration de performances d'une base SQL Server 2000
interroger plusieurs tablesSQL Server: Select date qui ont minimum une heure d'ecart
SQL Server et le XML[SQL] Problème écriture requête
Plus de sujets relatifs à : [SQL - ORACLE] Faire un somme de count sur plusieurs tables


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR