Sql 将Postgres查询结果合并到一个表中
我有两个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
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'