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

时间:2018-05-15 12:03:52

标签: sql postgresql

我正在使用PostgreSQL。我被困在构建查询。如果任何优先级与案例匹配,我们如何通过优先考虑数据来搜索结果并丢弃其余数据?

按家庭分组

如果家庭中的一个人的承诺级别为“VOTER”,那么应该取出它而不是同一家庭中状态不同的其他人,例如“委托”,“REACHOUT”或“中性”

如果家庭中的一个人的承诺级别为“已提交”,那么应该提取它而不是其他人在同一家庭中,其状态不同,例如“REACHOUT”或“NEUTRAL”

此层次结构如“VOTER”,“COMMITTED”,“REACHOUT”,“NEUTRAL” 如果家庭中的所有人都具有相同的承诺级别,则应该获取该人员移动号码(如果不为空)。

其他被丢弃

包含数据的样本表

<xyView id="my.test.xy.chart.view">
<head>
    <analysis id="org.eclipse.linuxtools.ust.random_chart" />
    <label value="Random view" />
</head>

<entry path="Dummy">
    <display type="constant" value="Value" />
    <name type="self" />
</entry>
</xyView>

OUTPUT:预期结果

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

1 个答案:

答案 0 :(得分:3)

您可以使用distinct on

执行此操作
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);