Итак, у меня есть таблица с именем Activities
, которая содержит схему user_id, activity
. Для каждого пользователя есть строка со списком действий. Вот как это может выглядеть (добавлены пустые строки, чтобы на них было проще смотреть, пожалуйста, игнорируйте):
| user_id | activity |
|---------|-----------|
| 1 | swimming | -- We want to match this
| 1 | running | -- person's activities
| | |
| 2 | swimming |
| 2 | running |
| 2 | rowing |
| | |
| 3 | swimming |
| | |
| 4 | skydiving |
| 4 | running |
| 4 | swimming |
Я бы хотел найти всех остальных пользователей с по крайней мере те же действия, что и для данного ввода id
, чтобы я мог рекомендовать пользователей с аналогичными действиями.
поэтому в приведенной выше таблице, если я хочу найти рекомендуемых пользователей для user_id=1
, запрос выдаст user_id=2
и user_id=4
потому что они участвуют в обоих swimming, running
(и более), но не user_id=3
, потому что они участвуют только в swimming
Так что результат с одним столбцом:
| user_id |
|---------|
| 2 |
| 4 |
- это то, что я в идеале искал бы
Что касается того, что я пробовал, я как бы застрял в том, как получить солидный набор действий user_id=1
дляматч против. В основном я ищу что-то вроде:
SELECT user_id from Activities
GROUP BY user_id
HAVING input_user_activities in user_x_activities
, где user1_activities - это просто набор действий нашего входного пользователя. Я могу создать этот набор, используя WITH input_user_activities AS (...)
в начале. Я застрял в user_x_activities
part
Есть мысли?