我有一个名为user_role的数据框,其中有一个键值(userid)。我想看看这些用户ID中有多少只有一个名为role的分类变量的值。
以下是一些示例数据:
userid role
ame1 programmer
ame1 programmer
ame1 analyst
cal5 programmer
cal5 programmer
up2 sales
我希望cal5在输出数据集中,因为只有一个角色,但ame1不应该在输出数据框中,因为它有多个角色值。
我尝试过这样的事情:
("select userid, role, count(*) from user_role group by userid, role having count(*) == 1")
但只能获得具有1行或角色值的用户。
("select userid, role, count(*) from user_role group by userid, role having count(*) > 1")
不会只获得具有一个角色值的那些,即使它们有多行
我想在输出中显示cal5和up2。理想情况下,我希望能够有一个子句,其中我只包含2行或更多行的用户。
由于
答案 0 :(得分:2)
将count
与distinct
一起使用,仅将结果限制为只有一个角色的用户。然后要检查多行,请使用count(*) > 1
:
select userid, min(role) as role
from user_role
group by userid
having count(*) > 1 and count(distinct role) = 1
答案 1 :(得分:1)
您可以在R
中使用dplyr
个包
library(dplyr)
df %>% group_by(userid) %>% summarise(n_distinct(role))
输出看起来像这样:
1 ame1 2
2 cal5 1
3 up2 1
您可以根据自己想要的条件进行选择。
说,所有等于1的人。
df %>% group_by(userid) %>% summarise(n_distinct(role)==1)