Граф с объединениями - PullRequest
       3

Граф с объединениями

0 голосов
/ 13 марта 2020

У меня есть три таблицы:

Пользователь ID

ImportFile Я БЫ reportUser_id

Активность Я БЫ importFile_id date

Я ищу запрос, который отвечает на следующий вопрос: Сколько файлов ImportFiles с действиями за один месяц загрузил каждый пользователь.

Например: пользователь 1 2

ImportFile 1, 1 2, 1 3, 2

Активность 1, 1, 01.01.2018 2, 1, 15.01.2018 3, 2, 02.01.2018 4, 3, 02.01.2018

Ожидаемый результат: User.id, count (importFiles), trun c (дата, «ММ») 1, 2, 01.01.2018 2, 1, 01.01.2018

Мой (неверный) запрос:

SELECT user.id, count(a.importfile_id), trunc(a.date, 'MM') FROM activity a 
left join importfile imp on imp.id = a.importfile_id 
left join user on user.id = importfile.reportingUser_id
group by trunc(a.date, 'MM'), a.importFile_id, user.id

Ответы [ 4 ]

2 голосов
/ 13 марта 2020

Я думаю, вам просто нужно исправить GROUP BY и использовать COUNT(DISTINCT):

SELECT u.id, count(distinct a.id),
       trunc(a.date, 'MM')
FROM user u join
     importfile i
     on u.id = i.reportingUser_id join
     activity a 
     on i.id = a.importfile_id 
GROUP BY trunc(a.date, 'MM'), u.id;

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

0 голосов
/ 13 марта 2020

Как обсуждалось в комментариях, в исходном сообщении отсутствовали данные в таблице ImportFile для пользователя 2. Как только это будет исправлено, вам просто нужно изменить исходный запрос, чтобы иметь count(distinct a.importfile_id) и group by trunc(a.date, 'MM'), user.id

Я добавил демо здесь

0 голосов
/ 13 марта 2020
SELECT * FROM ( 
    SELECT
        T1.ID AS USER_ID,
        COUNT(T3.importFile_id) AS CNT,
        TO_CHAR(TRUNC(t3.date, 'MM'), 'YYYY-MM-DD') AS DATEE
    FROM USERR T1
    FULL JOIN ImportFile T2 ON T1.ID = T2. reportingUser_id
    FULL JOIN Activity T3 ON T3.importFile_id = T2. ID
    GROUP BY TRUNC(t3.date, 'MM'), T1.ID )
ORDER BY USER_ID
0 голосов
/ 13 марта 2020

Я думаю, что ваш запрос нуждается в изменениях: 1.) count (отличный a.importfile_id) вместо count (a.importfile_id), поскольку файл может иметь несколько действий 2) как то, что @Gordon сказал «GROUP BY trun c (a.date, 'MM'), u.id; ”

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...