web-dev-qa-db-fra.com

SQL: combiner le nombre de sélections (*) de plusieurs tables

Comment combinez-vous plusieurs sélections (*) de différentes tables dans une seule déclaration?

J'ai une situation semblable à celle-ci post

mais je veux un retour.

J'ai essayé tous les syndicats mais il a craché en arrière 3 rangées séparées du compte Comment les combinez-vous en un seul?

select count(*) from foo1 where ID = '00123244552000258'
union all 
select count(*) from foo2 where ID = '00123244552000258'
union all
select count(*) from foo3 where ID = '00123244552000258'

edit: je suis sur MS SQL 2005

43
Jack
SELECT 
(select count(*) from foo1 where ID = '00123244552000258')
+
(select count(*) from foo2 where ID = '00123244552000258')
+
(select count(*) from foo3 where ID = '00123244552000258')

C'est un moyen facile.

84
Chris J

Je suis surpris que personne n'ait suggéré cette variation:

SELECT SUM(c)
FROM (
  SELECT COUNT(*) AS c FROM foo1 WHERE ID = '00123244552000258'
  UNION ALL
  SELECT COUNT(*) FROM foo2 WHERE ID = '00123244552000258'
  UNION ALL
  SELECT COUNT(*) FROM foo3 WHERE ID = '00123244552000258'
);
15
Bill Karwin
select 
  (select count(*) from foo) as foo
, (select count(*) from bar) as bar
, ...
14
Remus Rusanu

En gros, vous faites les comptes en tant que sous-requêtes dans une sélection standard.

Un exemple serait le suivant, cela retourne 1 ligne, deux colonnes

SELECT
 (SELECT COUNT(*) FROM MyTable WHERE MyCol = 'MyValue') AS MyTableCount,
 (SELECT COUNT(*) FROM YourTable WHERE MyCol = 'MyValue') AS YourTableCount,
7
Mitchel Sellers

Vous pouvez combiner vos comptes comme vous le faisiez auparavant, mais vous pouvez ensuite les résumer de différentes manières, dont l'une est présentée ci-dessous:

SELECT SUM(A) 
FROM
(
    SELECT 1 AS A
    UNION ALL 
    SELECT 1 AS A
    UNION ALL
    SELECT 1 AS A
    UNION ALL
    SELECT 1 AS A
) AS B
2
Jason

vous pouvez nommer tous les champs et ajouter une sélection externe sur ces champs:

SELECT A, B, C FROM ( your initial query here ) TableAlias

Cela devrait faire l'affaire.

0
Kris
select sum(counts) from (
select count(1) as counts from foo 
union all
select count(1) as counts from bar)
0
Gren

Pour Oracle:

select( 
select count(*) from foo1 where ID = '00123244552000258'
+
select count(*) from foo2 where ID = '00123244552000258'
+
select count(*) from foo3 where ID = '00123244552000258'
) total from dual;
0
toquart