#sql #oracle
Вопрос:
SELECT
pu.username, prdt.role_name, prdt.description,
prd.role_common_name, COUNT(*) cnt --> this
FROM
per_users pu
JOIN
per_user_roles pur ON pur.user_id = pu.user_id
JOIN
per_roles_dn prd ON prd.role_id = pur.role_id
JOIN
per_roles_dn_tl prdt ON prdt.role_id = prd.role_id
GROUP BY
pu.username, --> and this prdt.role_name, prdt.description, prd.role_common_name
Может ли кто-нибудь помочь мне получить еще один столбец количества ролей, назначенных определенному столбцу пользователей?
Комментарии:
1. Отредактируйте свой вопрос и предоставьте примеры данных и желаемые результаты.
Ответ №1:
Если вам нужно отобразить pu.username, prdt.role_name, prdt.description, prd.role_common_name
вместе с количеством ролей на пользователя, то вам не нужно предложение group by, а функция окна count()over() сделает свое дело.
SELECT pu.username, prdt.role_name, prdt.description, prd.role_common_name, count(prdt.role_name)over(partition by pu.username) role_count_per_user
FROM per_users pu JOIN
per_user_roles pur
ON pur.user_id = pu.user_id JOIN
per_roles_dn prd
ON prd.role_id = pur.role_id JOIN
per_roles_dn_tl prdt
ON prdt.role_id = prd.role_id
Но если есть возможность назначить одну и ту же роль пользователю несколько раз (маловероятно), и вам нужно это количество, то группировка по-это правильный подход.
SELECT pu.username, prdt.role_name, prdt.description, prd.role_common_name, COUNT(*)cnt
FROM per_users pu JOIN
per_user_roles pur
ON pur.user_id = pu.user_id JOIN
per_roles_dn prd
ON prd.role_id = pur.role_id JOIN
per_roles_dn_tl prdt
ON prdt.role_id = prd.role_id
GROUP BY pu.username, and this prdt.role_name, prdt.description, prd.role_common_name
Комментарии:
1. Если этот ответ помог вам, пожалуйста, примите его, нажав зеленую галочку, чтобы отметить этот вопрос как ответ.