sql - 基于发生的标志更改
问题描述
我有下表作为输入
id|type
1|manager
1|non manager
1|manager
1|non manager
1|non manager
1|manager
期望的输出:如果有多个 id 落入 manager 和 non manager hen,它应该显示为混合,如下所示。
id|type
1|mixed
任何人都可以帮助..
解决方案
一种方法使用窗口函数:
select id,
(case when max(type) over (partition by id) =
min(type) over (partition by id)
then max(type) over (partition by id)
else 'Mixed'
end) as type
from t;
或者,exists
我也想到了:
select id,
(case when exists (select 1
from t t2
where t2.id = t.id and t2.type <> t.type
)
then 'Mixed' else type
end) as type
from t;
编辑:
要为每个 id 获取一行,只需使用聚合:
select id,
(case when max(type) = min(type)
then max(type)
else 'Mixed'
end) as type
from t
group by id;
推荐阅读
- python - 如何将 JSON 的第一部分转换为数组 python?
- python - QModelIndex.internalPointer() 返回随机对象并崩溃
- xhtml - 如何限制 XHTML 中的输出文本?
- laravel - Laravel Livewire 内联组件返回语法错误
- java - 如何订购 JTable (Java) 的 Integer.class 和 Float.class 列?
- c# - 如何测试使用工厂提供的类
- sql - 按来源统计每次购买前 30 天的访问次数
- css - 如何让 MaterialUI 中的列表换行?
- http - 尝试在 DB 中写入时应如何处理错误
- cmake - CMake 安装:保留文件时间戳