sql - 将两个查询加入两列

标签 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 条丝束。

最佳答案

我认为你可以用条件聚合做你想做的事:

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

或者,减少输入:

SELECT time, 
       SUM( (username = 'jon')::int ) as cnt_jon,
       SUM( (username = 'bob')::int ) as cnt_bob
FROM My_With
GROUP BY time;

关于sql - 将两个查询加入两列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55259802/

相关文章:

sql - 如何在 MySQL 的左连接中获取关联行的计数?

mysql - 将 LEFT JOIN 子查询限制为 1 个结果

regex - 使用 PostgreSQL regexp_replace 函数删除连续的重复字符

python-3.x - 如何使用 psycopg2.extras.execute_values 更新 ON CONFLICT

postgresql - 使用 Alembic 更新 Azure Database for PostgreSQL 灵活服务器

php - MYSQL 使用 SUB SELECT TO WHERE 子句

MySQL 使用 LEFT JOIN 从多个表中选择

SQL:查找最大行数

sql - DataReader.GetString() 通过列名

hadoop - 在 hive 0.13 中使用 LATERAL VIEW 的子查询