将两个查询分为两列

时间:2019-03-20 11:34:02

标签: sql postgresql subquery

我是PostgreSQL的新手,我在很短的时间内学到了很多东西,但是还没有学到所有东西,所以如果这是一个简单的问题,请原谅我。 我已经搜索过了,JOIN应该将它们组合在一起,但是使用我的设置我无法使其正常工作。

问题 我有一个WITH语句,其中包含我要搜索的所有条件 然后,我希望您执行两个SELECT查询,每个用户一次(一次仅搜索2个用户)

数据 数据由时间和数量组成,with子句中有条件,其中在查询中仅进一步使用用户名。

示例

HOUR AMOUNT
01 200
02 300
03 500
04 800

使用UNION,我在同一列中获得了两个查询

HOUR AMOUNT
01 200
01 75
02 300
02 50
03 500
03 21
04 800
04 300

但是我只希望第二个查询出现在新列中

HOUR AMOUNT AMOUNT2
01 200     75   
02 300     50
03 500     21
04 800     300

我已经简化了SQL,所以它不会太长:

WITH My_With AS (
...
)


SELECT time, count(time) AS Column_1
FROM My_With
WHERE
    username= 'jon' 
GROUP BY time

UNION

SELECT time, count(time) AS Column_2
FROM My_With
WHERE
    username= 'bob' 
GROUP BY time
ORDER BY time   
;

我知道这可能真的很简单,但我只是想不通,我设法将第二组金额放入第二列,但此时仍会生成2个丝束。

1 个答案:

答案 0 :(得分:2)

我认为您可以通过条件聚合来完成自己想做的事情

Root
|
-SocialMediaGallery
    |
    -<child nodes>
|
-Volunteers
    |
    -<child nodes>

或者,键入更少:

SELECT time, 
       COUNT(*) FILTER (WHERE username = 'jon') as cnt_jon,
       COUNT(*) FILTER (WHERE username = 'bob') as cnt_bob
FROM My_With
GROUP BY time;