案例优先级查询中的PostgreSQL问题
我正在使用PostgreSQL。我被困在构建查询中。如果任何一个优先级与案例匹配,我们如何通过对数据给予优先级来搜索结果,并丢弃其余数据 按家庭分组 如果家庭中的一个人有承诺级别的“选民”,则应将其取回,而不是取回同一家庭中身份不同的其他人,如“承诺的”、“重新考虑的”或“中立的” 如果家庭中的一个人的承诺级别为“已承诺”,则应提取该承诺级别,而不是提取同一家庭中状态不同的其他人,如“重新承诺”或“中立” 此层次结构如下所示:“投票者”、“已提交”、“重新获得”、“中立” 如果家庭中的所有人都具有相同的提交级别,则应获取个人手机号码(如果不为空) 其他的都被丢弃了 带数据的示例表案例优先级查询中的PostgreSQL问题,sql,postgresql,Sql,Postgresql,我正在使用PostgreSQL。我被困在构建查询中。如果任何一个优先级与案例匹配,我们如何通过对数据给予优先级来搜索结果,并丢弃其余数据 按家庭分组 如果家庭中的一个人有承诺级别的“选民”,则应将其取回,而不是取回同一家庭中身份不同的其他人,如“承诺的”、“重新考虑的”或“中立的” 如果家庭中的一个人的承诺级别为“已承诺”,则应提取该承诺级别,而不是提取同一家庭中状态不同的其他人,如“重新承诺”或“中立” 此层次结构如下所示:“投票者”、“已提交”、“重新获得”、“中立” 如果家庭中的所有人都具
ID COMMITTED LEVEL MOBILE NUMBER FAMILY NUMBER
1 VOTER 234828288 1
2 COMMITED 262349911 1
3 COMMITED 924792922 2
4 REACHOUT 82639472 2
5 VOTER 79246826234 3
6 VOTER NULL 3
输出:预期结果
ID COMMITED LEVEL MOBILE NUMBER FAMILY NUMBER
1 VOTER 234828288 1
3 COMMITED 924792922 2
5 VOTER 79246826234 3
您可以使用上的进行此操作:
select distinct on (family_number) t.*
from t
order by family_number,
(case when committed_level = 'Voter' then 1
when committed_level = 'COMMITTED' then 2
when committed_level = 'REACHOUT' then 3
when committed_level = 'Neutral' then 4
else 5
end),
(case when mobile_number is not null then 1 else 2 end);
不要为未涉及的产品添加标签。。。