mysql - Group by select 基于 OR 条件

标签 mysql sql sql-server oracle postgresql

将 UNION 与两个选择查询一起使用后,我得到以下结果

UserId    Name    Status
------   ------  --------
1   User1   Active
2   User2   Active
1   User1   InActive
3   User3   InActive

但预期的结果是

UserId Name Status
---------------------
1   User1   Active
2   User2   Active
3   User3   InActive

我需要的是,我想按列 Id 分组,如果有任何一个结果是事件的,则状态为事件。如何为此形成 SQL 查询?

任何人都可以建议查询以下任何一个数据库吗?

  1. MSSQL
  2. 甲骨文
  3. MySQL
  4. PostgreSQL

编辑:

这是我在 PostgreSQL 中尝试过的查询

(SELECT DISTINCT User.Id,User.DisplayName,AppAccessToUsers.IsActive='1' AND User.IsActive='1' AS IsStatusActive 
FROM Applications Left JOIN AppAccessToUsers ON (Applications.Id=AppAccessToUsers.ApplicationId) 
Left JOIN User ON (AppAccessToUsers.UserId=User.Id) WHERE Applications.ClientId='e7e66c1b-b3b8-4ffb-844b-fc4840803265') 
UNION 
(SELECT DISTINCT User.Id,User.DisplayName,AppAccessToGroups.IsActive='1' AND Group.IsActive='1' AND UserGroup.IsActive='1' AND User.IsActive='1' AS IsStatusActive 
FROM Applications Left JOIN AppAccessToGroups ON (Applications.Id=AppAccessToGroups.ApplicationId) 
Left JOIN Group ON (AppAccessToGroups.GroupId=Group.Id) Left JOIN UserGroup ON (Group.Id=UserGroup.GroupId) 
Left JOIN User ON (UserGroup.UserId=User.Id) WHERE Applications.ClientId='e7e66c1b-b3b8-4ffb-844b-fc4840803265')

最佳答案

使用这个查询,

SELECT  UserId
        ,Name
        ,CASE WHEN min(status) = 'Active' THEN 'Active' ELSE 'InActive' END
FROM users GROUP BY UserId,Name

关于mysql - Group by select 基于 OR 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43997720/

相关文章:

不指定列名的 SQL 合并功能

sql - 根据某些标准选择重复项

c# - 在 C# 中获取 SQL 执行 cmd 持续时间

mysql - 替换 Sql 中的正则表达式

mysql - 转换为十进制的 varchar 的聚合没有给出正确的答案

MySQL 每周都有事件,但每个月只有第一周?

java - 准备好的语句返回部分记录,即 3,而同一查询的 sql 开发人员返回所有记录,即 5

sql - 连接来自另一个查询的 crosstab() 查询的返回类型

php - mysql查询哪个最好

mysql - 插入多个值时 Node mysql 上的“ER_PARSE_ERROR”