如何计算一列的值并考虑另一列的值 table
How to calculate the values of one column taking into account the values from another table
我需要一个查询,允许我计算一个列的值并考虑另一个 table 中的值,更准确地说,我需要计算用户是否仍然活跃(如果用户有所有过期的角色,那么他是不活跃的),考虑到 departure_date 第二个 table
user_role table
id_user
id_role
departure_date
1
1
2022-05-05
1
2
2022-06-18
2
1
2022-04-12
用户 table
id_user
name
1
George
2
John
3
Alex
我想 return 这个 table,其中 1 是活动的,0 是不活动的:
用户 table
id_user
name
status
1
George
1
2
John
0
3
Alex
0
此时,我进行了查询,其中 return 是我的所有非活动用户和具有一个或多个分配角色的活动用户。我想获取所有用户,包括那些没有指定角色的用户(例如 Alex,在我的示例中)
SELECT user_management.user.*,
if(count(CASE when current_date() > departure_date_organization
then 1 END) = count(*),0,1) as status
FROM user_management.user,
user_organization_role
WHERE user.id_user = user_management.user_organization_role.id_user
GROUP BY user.id_user;
使用我的查询,我得到了这个结果,不包含 Alex
:
id_user
name
status
1
George
1
2
John
0
提前致谢
您不需要联接和聚合。
使用 EXISTS
:
SELECT u.*,
EXISTS (
SELECT 1
FROM user_management.user_organization_role r
WHERE r.id_user = u.id_user AND r.departure_date_organization > CURRENT_DATE
) status
FROM user_management.user u;
我需要一个查询,允许我计算一个列的值并考虑另一个 table 中的值,更准确地说,我需要计算用户是否仍然活跃(如果用户有所有过期的角色,那么他是不活跃的),考虑到 departure_date 第二个 table
user_role table
id_user | id_role | departure_date |
---|---|---|
1 | 1 | 2022-05-05 |
1 | 2 | 2022-06-18 |
2 | 1 | 2022-04-12 |
用户 table
id_user | name |
---|---|
1 | George |
2 | John |
3 | Alex |
我想 return 这个 table,其中 1 是活动的,0 是不活动的:
用户 table
id_user | name | status |
---|---|---|
1 | George | 1 |
2 | John | 0 |
3 | Alex | 0 |
此时,我进行了查询,其中 return 是我的所有非活动用户和具有一个或多个分配角色的活动用户。我想获取所有用户,包括那些没有指定角色的用户(例如 Alex,在我的示例中)
SELECT user_management.user.*,
if(count(CASE when current_date() > departure_date_organization
then 1 END) = count(*),0,1) as status
FROM user_management.user,
user_organization_role
WHERE user.id_user = user_management.user_organization_role.id_user
GROUP BY user.id_user;
使用我的查询,我得到了这个结果,不包含 Alex
:
id_user | name | status |
---|---|---|
1 | George | 1 |
2 | John | 0 |
提前致谢
您不需要联接和聚合。
使用 EXISTS
:
SELECT u.*,
EXISTS (
SELECT 1
FROM user_management.user_organization_role r
WHERE r.id_user = u.id_user AND r.departure_date_organization > CURRENT_DATE
) status
FROM user_management.user u;