Как агрегировать количество заметок, отправленных каждому пользователю? - PullRequest
0 голосов
/ 25 сентября 2018

Рассмотрим следующие таблицы

group (obj_id here is user_id)

group_id    obj_id    role
--------------------------
100         1         A
100         2         root
100         3         B
100         4         C

notes

obj_id      ref_obj_id    note      note_id
-------------------------------------------
1           2                       10
1           3                       10
1           0             foobar    10
1           4                       20
1           2                       20
1           0             barbaz    20
2           0             caszes    30
2           1                       30
4           1                       70
4           0             taz       70
4           3                       70

Примечание: примечание в системе может быть назначено нескольким пользователям (например: администратор может написать «отправлено предупреждение 2 пользователям» и связать его с 2 user_id s).Первый пользователь, с которым связана заметка, хранится не так, как другие связанные пользователи.Само примечание связано только с первым связанным пользователем.Всякий раз, когда group.obj_id = notes.obj_id, затем ref_obj_id = 0 и note <> null

, мне нужно сделать обзор notes для пользователя.Обычно я делаю это, присоединяясь к group.obj_id = notes.obj_id, но здесь все идет не так, потому что ref_obj_id означает 0 (в этом случае я должен присоединиться к notes.obj_id)

В этой системе 4 примечания(foobar, barbaz, caszes и taz).

Желаемый результат:

obj_id  user_is_primary notes_primary  user_is_linked  notes_linked
-------------------------------------------------------------------
1       2               10;20          2               30;70                  
2       1               30             2               10;20
3       0                              2               10;70
4       1               70             1               20

Как мне получить этот агрегированный результат?

Я надеюсь, что смог ясно объяснить ситуацию;возможно, это моя неопытность, но я считаю модель данных не самой простой.

1 Ответ

0 голосов
/ 25 сентября 2018

Не могли бы вы просто включить это в предложение ON вашего объединения?

case when notes.ref_obj_id = 0 then notes.obj_id else notes.ref_obj_id end = group.obj_id 
...