union函数postgresql中的子查询规则

时间:2016-10-31 09:35:21

标签: postgresql subquery union

我想根据不同的表格

制作一份报告
SELECT week, countA, countB
FROM (
 (SELECT week, COUNT(*) AS countA FROM dataA a
 GROUP BY 1 )
 UNION
 (SELECT week , COUNT(*) AS countB FROM dataB 
  WHERE blablabla ...  GROUP BY 1) b
  ) c

现在我有一些问题

  • 他不希望子查询b具有名称

  • 他不知道countB是什么,如果我不给第二个查询一个名字

  • 我感到困惑,不知道我是否应该把第二个查询的名称放在哪里

他们的解决方案是否是他们的某种“规则手册”,因为每次使用UNION功能时都会感到困惑

2 个答案:

答案 0 :(得分:0)

SELECT test, counter
  FROM (
    (SELECT test, COUNT(*) AS counter FROM tableA
     GROUP BY 1 )
    UNION
    (SELECT test , COUNT(*) AS counter FROM tableB 
    WHERE test <> 0  GROUP BY 1) 
   ) c

您不需要命名查询,union将两个表一起合并到同一列。但它不会合并两个列不同的表。所以你需要计数器来命名相同。所以你有两列test和table来自tableA和tableB。

答案 1 :(得分:0)

您可以通过以下方式简化此查询:

SELECT test, COUNT(*) AS counter FROM tableA
 GROUP BY 1
UNION
SELECT test , COUNT(*) AS counter FROM tableB 
WHERE test <> 0  GROUP BY 1

列不必具有相同的名称。只要它们是“联合兼容”(简而言之,相同类型或类型可以相互促进)。结果表中列的名称与第一个选择查询中的列名称相同。