Sql 将Postgres查询结果合并到一个表中

Sql 将Postgres查询结果合并到一个表中,sql,postgresql,Sql,Postgresql,我有两个Postgres查询 SELECT date_trunc('hour', time) t, COUNT(*) AS "SC15" FROM logfile WHERE source = 'SC15' AND type = 'Sort' GROUP BY t ORDER BY t; SELECT date_trunc('hour', time) t, COUNT(*) AS "SC71" FROM logfile WHERE source = 'SC7

我有两个Postgres查询

SELECT date_trunc('hour', time) t, COUNT(*) AS "SC15" FROM logfile
      WHERE source = 'SC15' AND type = 'Sort'
      GROUP BY t ORDER BY t;

SELECT date_trunc('hour', time) t, COUNT(*) AS "SC71" FROM logfile
      WHERE source = 'SC71' AND type = 'Sort'
      GROUP BY t ORDER BY t;

如何使结果在单独的列中并排显示?按小时分组的t interval列、SC15列和SC17列。我试过联合和交叉。我想我需要做一张临时桌?不知道怎么做。谢谢

不需要在两个查询中执行此操作

SELECT 
    date_trunc('hour', time) t,
    COUNT(*) FILTER (WHERE source = 'SC15') AS "SC15", 
    COUNT(*) FILTER (WHERE source = 'SC71') AS "SC71" 
FROM logfile
WHERE source IN ('SC15', 'SC71') AND type = 'Sort'
GROUP BY t
ORDER BY t
IN运算符允许您过滤多个值。FILTER子句在计数之前过滤掉一些行。

您可以与窗口函数一起使用,并在加入结果之后使用。注意,最好使用左连接,因为CTE中可能有不同的行数

with l1 as ( SELECT row_number() over(order by t) rn, date_trunc('hour', time) t, COUNT(*) c FROM logfile l1 WHERE source = 'SC15' AND type = 'Sort' GROUP BY t ORDER BY t ), l2 as ( SELECT row_number() over(order by t) rn, date_trunc('hour', time) t, COUNT(*) c FROM logfile WHERE source = 'SC71' AND type = 'Sort' GROUP BY t ORDER BY t ) SELECT l1.t, l1.c, l2.t, l2.c FROM l1 LEFT JOIN l2 on l1.rn=l2.rn 作为另一个变体,您可以尝试类似的方法

select date_trunc('hour', time) t, count(*) over (partition by date_trunc('hour', time), source, type) c from logfile where source in ('SC15', 'SC71') AND type = 'Sort'