选择不同的值并按条件排除行

问题描述 投票:0回答:1

有一个表格,其中包含

category not null
sub_category default null
列。

  • category
    始终设置
  • sub_category
    是可选的

我需要从表格中选择

distinct category,sub_category
并且

  • 排除 sub_category 不为 null 和 null 的记录
  • 如果只有一种
    category
    +
    <null>
  • 的组合,请记录
category    sub_category  
girl_toys        fluffy
girl_toys        dolls
drawing          <null> -- keep it since only one null sub_category
paining          red_color
paining          <null> -- exclude since there is non null sub_category

预期结果:

category    sub_category  
girl_toys        fluffy
girl_toys        dolls
drawing          <null> -- keep is since drawing has only one null
paining          red_color -- <null> record excluded since there is non null sub_category exists 

sql postgresql group-by
1个回答
0
投票

多种方法中的一种:

SELECT DISTINCT category, sub_category 
FROM   tbl t1
WHERE  sub_category IS NOT NULL
   OR (sub_category IS NULL
       AND NOT EXISTS (
         SELECT FROM tbl t2
         WHERE  t2.category = t1.category
         AND    t2.sub_category IS NOT NULL
         )
      );

我假设如果有多个相同的实例,您也想保留一份副本 (

category
+
null
)。

© www.soinside.com 2019 - 2024. All rights reserved.