Как выбрать два столбца, один из которых имеет условие, когда объединяются две таблицы? - PullRequest
1 голос
/ 27 июня 2019

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

Таблица №1: allusers

  • ИД пользователя
  • отдел
  • статус ((0 или 1)
  • is_online

Таблица №2: userlog

  • userlogid
  • время входа

Я хочу объединить две таблицы следующим образом:

(по группам)

  • отдел
  • count (*) ==>allusers
  • count (*) ==> status = 1
  • count (*) ==> table1.userid = table2.userlogid

Я не знаю, какчтобы отобразить столбец с подсчетом (*) ==> status = 1

Я не могу сгруппировать столбец 'count (*) ==> status = 1'

Пожалуйста, помогите мне проверить мойкоды

select o.department as DM,
       count(p.userlogid) as userlog,
       count(o.department) as alluser,
       count(p.userlogid)  as userlog1
from table2 as p
right OUTER join table1 as o
on p.userlogid=o.USERID
on q.userlogid=o.userid
where o.status=1
group by o.department;

Ответы [ 2 ]

0 голосов
/ 27 июня 2019

Я думаю, вы просто хотите условную агрегацию. Но я бы порекомендовал вам использовать left join вместо right join.

Тогда, я думаю, вы хотите count(distinct), чтобы считать пользователей, а не регистрировать записи ::

select u.department as DM,
       count(distinct u.userid) as num_users,
       count(distinct l.userlogid) as num_log_users,
       count(distinct case when o.status = 1 then l.userlogid end) as num_status1_users
from allusers u left join
     userlog l
     on l.userlogid = u.USERID
group by o.department;

Возможно, вы хотите считать записи журнала, а не пользователей. Если это так, вы можете удалить distinct:

select u.department as DM,
       count(u.userid) as num_users,
       count(l.userlogid) as num_log_users,
       count(case when o.status = 1 then l.userlogid end) as num_status1_users
from allusers u left join
     userlog l
     on l.userlogid = u.USERID
group by o.department;
0 голосов
/ 27 июня 2019

Посмотрите на этот запрос:

select o.department as DM,
       sum(1) allusers,
       sum(case when status=1 then 1 else 0 end) usersWithStatus1,
from table2 as p
right OUTER join table1 as o
on p.userlogid=o.USERID
GROUP BY o.department;

Вы используете SUM с CASE для выполнения некоторых условий.

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