根据列的优先级选择行

时间:2021-01-20 16:03:48

标签: sql

以下是我的源表:

<头>
条目 ID 姓名 颜色
1 约翰 红色
2 约翰
3 史蒂夫
4 史蒂夫

我想根据

选择整行
  • “名称”列的不同值
  • 如果“颜色”列不null,我将选择该行。否则,我将接受 null 值行。
  • 最后,我会根据较小的条目ID进行选择(ID越小,条目ID越早)

预期结果应该是:

<头>
条目 ID 姓名 颜色
1 约翰 红色
3 史蒂夫

我是 SQL 新手,想知道有什么方法可以达到预期的结果?

非常感谢,非常感谢。 (原谅我的英语/语法不好)

1 个答案:

答案 0 :(得分:0)

您可以使用 row_number()。这几乎适用于任何数据库:

select t.*
from (select t.*,
             row_number() over (partition by name order by colour desc, id) as seqnum
      from t
     ) t
where seqnum = 1;

降序的 order byNULL 值放在最后,因此首先选择非 NULL 行。

另一种方法是:

select t.*
from t
where t.colour is not null or
      t.id = (select (case when count(colour) = 0 then min(t2.id) end)
              from t
             )
相关问题