Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
案例优先级查询中的PostgreSQL问题_Sql_Postgresql - Fatal编程技术网

案例优先级查询中的PostgreSQL问题

案例优先级查询中的PostgreSQL问题,sql,postgresql,Sql,Postgresql,我正在使用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);

不要为未涉及的产品添加标签。。。