Получить каждую роль пользователя в PostgreSQL - PullRequest
0 голосов
/ 27 июня 2018

Предположим, у меня есть БД, и в этой БД у меня есть таблица пользователей и таблица групп, где каждый пользователь связан с определенной группой.

В таблице групп у нас есть группа «ввод данных», группа «рецензент», группа «утверждающий» и т. Д.

Теперь предположим, что пользователь X. Этот пользователь добавлен в группу «Ввод данных», а также в группу «Рецензент», что означает, что пользователь X имеет и права доступа: ввод данных и рецензент.

Y - другой пользователь, имеющий право доступа «ввод данных», поэтому, когда я хочу создать отчет, чтобы получить счетчик для каждого пользователя и группы, пользователя «ввод данных» и пользователя «ввод данных + рецензент» должны учитываться отдельно.

Дело в том, что те пользователи, которые принадлежат к обеим группам, не должны учитываться в отдельных группах; например, пользователь «ввод данных + рецензент» не должен учитываться в группе «ввод данных».

1 Ответ

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

Я бы агрегировал дважды - сначала для каждого пользователя получали все группы, к которым он или она принадлежат, а затем агрегировали этот результат и подсчитывали, сколько появляется каждая комбинация:

-- Count how many times each combination occurs
SELECT   group_combinataions, COUNT(*) 
FROM     (-- Get the groups for each user
          SELECT   STRING_AGG(group_name ORDER BY group_name) AS group_combinations 
          FROM     groups
          GROUP BY userid) t
GROUP BY group_combinations
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...