10
votes

Comment faire une somme sur deux tables non liées?

J'essaie de résumer sur deux tables non liées avec Postgres. Avec MySQL, je ferais quelque chose comme ça: xxx

Cela devrait me donner une table avec deux colonnes nommées Sum_1 et Sum_2. Cependant, Postgres ne me donne aucun résultat pour cette requête.

Des idées?


0 commentaires

3 Réponses :


12
votes
SELECT t1.sum_c1, t1.sum_c2, t2.sum_t2_c1
FROM
(
     SELECT SUM(col1) sum_c1,
            SUM(col2) sum_c2
 FROM table1
) t1
FULL OUTER JOIN
(
     SELECT SUM(col1) sum_t2_c1
     FROM table2
) t2 ON 1=1;

2 commentaires

Vrai. Postgres me donne un résultat avec des sommes de zéro, car une de mes table n'a aucune ligne. Mais votre réponse est exactement ce que je cherchais. Existe-t-il un moyen de modifier cela pour sélectionner plusieurs colonnes dans la même table sans double-faire sous-requêtes?


J'ai mis à jour avec une requête alternative pour gérer plusieurs colonnes



1
votes

Je suggère quelque chose comme ce qui suit, bien que je ne l'ai pas essayé. XXX

L'idée est de créer deux vues en ligne, chacune avec une rangée, et ensuite faire une jointure cartésienne Sur ces deux vues, chacune avec une rangée.


0 commentaires

2
votes

combiner nombre multiple d'agrégats plusieurs tables , utilisez jointure croisée : xxx

il y a toujours exactement un rangée de l'une des sous-sollicitations, même sans rangées dans les tables source. Donc, un rejoindre (ou même une seule virgule entre les sous-sollicitations - étant le sténographique non si facile à lire pour une croix avec une prime inférieure) est le moyen le plus simple.

Notez que cela produit une croix rejoindre entre des lignes agrégées simples, pas une croix rejoignant entre les lignes individuelles de plusieurs tables telles que votre instruction incorrecte dans la question serait donc de multiplier mutuellement.


0 commentaires