J'essaie de résumer sur deux tables non liées avec Postgres. Avec MySQL, je ferais quelque chose comme ça: 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. P> Des idées? P> P>
3 Réponses :
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;
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
Je suggère quelque chose comme ce qui suit, bien que je ne l'ai pas essayé. 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. p> p>
combiner nombre multiple em> d'agrégats plusieurs tables em>, utilisez il y a toujours em> exactement un rangée de l'une des sous-sollicitations, même sans rangées dans les tables source. Donc, un Notez que cela produit une croix rejoindre entre des lignes agrégées simples, pas em> une croix rejoignant entre les lignes individuelles de plusieurs tables telles que votre instruction incorrecte dans la question serait donc de multiplier mutuellement. P> p > jointure croisée code>
: rejoindre code> (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. P>