Объедините два запроса в два столбца - PullRequest
0 голосов
/ 20 марта 2019

Я новичок в PostgreSQL и за короткое время многому учусь, но еще не все узнал, так что простите, если это простой вопрос. Я искал это, и JOIN должен объединить их, но с моей настройкой я не могу заставить его работать.

ПРОБЛЕМА У меня есть утверждение WITH, которое имеет все критерии для того, что я хочу найти Затем я хочу, чтобы вы выполнили два запроса SELECT, по одному для каждого пользователя (только 2 пользователя будут разыскиваться одновременно)

DATA Данные состоят из времени и количества, в предложении 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 Ответ

2 голосов
/ 20 марта 2019

Я думаю, что вы можете делать то, что вы хотите с условной агрегацией:

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...