【问题标题】:Selecting rows based on priority of a column根据列的优先级选择行
【发布时间】:2021-01-20 16:03:48
【问题描述】:

以下是我的源表:

Entry ID Name Colour
1 John Red
2 John null
3 Steve null
4 Steve null

我想选择整行基于

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

预期的结果应该是:

Entry ID Name Colour
1 John Red
3 Steve null

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

非常感谢,非常感谢。 (请原谅我糟糕的英语/语法)

【问题讨论】:

  • 。 .我删除了不一致的数据库标签。请仅使用您真正使用的数据库进行标记。

标签: sql


【解决方案1】:

您可以使用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
             )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-08
    • 1970-01-01
    • 1970-01-01
    • 2020-06-23
    • 2017-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多