@YellowNicon

SQL-запрос: как выбрать тех, у кого авторизация ТОЛЬКО из приложения?

Есть таблица enter в которую пишутся все авторизации пользователей. Один из столбцов в ней enter_source, который записывается в 4 варианта (landing, web. ios, android).

Как выбрать только тех пользователей, у кого авторизация была с приложения, но с веба не было. При использовании NOT IN () AND IN () и JOIN исключить тех, у кого была все же авторизация и с веба не получается.
  • Вопрос задан
  • 64 просмотра
Решения вопроса 1
@Akina
Сетевой и системный админ, SQL-программист.
SELECT DISTINCT user_id
FROM enter t1
WHERE NOT EXISTS ( SELECT NULL
                   FROM enter t2
                   WHERE enter_source = 'web' 
                     AND t1.user_id = t2.user_id )
  AND EXISTS ( SELECT NULL
               FROM enter t3
               WHERE enter_source IN ('ios', 'android')
                 AND t1.user_id = t3.user_id );
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
SELECT *
  FROM `users`
  WHERE `id` IN (
    SELECT `user_id`
      FROM `enter`
      WHERE `enter_source` = 'ios' OR `enter_source` = 'android'
  ) AND `id` NOT IN (
    SELECT `user_id`
      FROM `enter`
      WHERE `enter_source` = 'landing' OR `enter_source` = 'web'
  )
Ответ написан
vilinyh
@vilinyh
select user_id
from enter
group by user_id
having sum(case when enter_source in ('ios', 'android') then 1 else 0 end) > 0
  and sum(case when enter_source in ('web', 'landing') then 1 else 0 end) = 0


select
    app.user_id
from (
    select distinct user_id from enter where enter_source in ('ios', 'android')
) app
left outer join (
    select distinct user_id from enter where enter_source in ('web', 'landing')
) web on app.user_id = web.user_id
where web.user_id is null


Просто еще две версии запроса с немного другими планами выполнения.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы