Как покинуть SQL Подзапрос с таблицей - PullRequest
0 голосов
/ 14 апреля 2020

Цель: создать запрос, который вычисляет соотношение идентификаторов, которые имеют / не имеют определенный атрибут.

Таблица 1: Поля событий: event_id, event_name, user_id Поле event_id - уникальный ключ / индекс Поле event_name имеет 3 потенциальных значения, одно из которых проверяется. Поле user_id является внешним ключом из Таблицы 2

Таблица 2: Поля пользователей: id (и длинный список других атрибутов, которые не имеют отношения)

Чтобы получить список user_ids с уточняющий атрибут, я создал следующее:

SELECT DISTINCT events.user_id AS viewing_ids
FROM events 
WHERE event_name = 'view_user_profile'

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

Следующая часть - это то, где я запутаться. Да, я мог бы СЧИТАТЬ (ОТЛИЧИТЬ выбор, чтобы получить идентификаторы подсчета, которые имеют атрибут 'view_user_profile', но который дает только половину ответа. Что мне нужно сделать, так это соединить этот список с полным списком user_id от пользователей таблицы, а затем определить, когда идентификатор существует или не существует.

Я думаю, что начальный SELECT должен быть

SELECT 
(CASE WHEN viewers IS NULL THEN false
  ELSE true END) AS has_viewed_profile
, COUNT(user_id) AS users
FROM 
 (SELECT DISTINCT events.user_id AS viewing_ids
  FROM events 
  WHERE event_name = 'view_user_profile') viewers
LEFT JOIN
users
ON 
??? = users.id


Здесь я теряюсь, у меня нет имени столбца для зрителей ...

1 Ответ

0 голосов
/ 14 апреля 2020

Я думаю, это то, что вы хотите:

select count(e.user_id) / count(*) as view_ratio
from users u left join
     (select distinct e.user_id
      from events e
      where e.event_name = 'view_user_profile'
     ) e
     on e.user_id = u.id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...