postgresql Postgres SQL中的Either or Condition

uyhoqukh  于 2023-04-29  发布在  PostgreSQL
关注(0)|答案(2)|浏览(123)

我如何选择在C列中有X或Y但在Postgres中没有两者的行?基本上B列中不应有重复值。
数据:

A      |      B      |     C      |
----------------------------------------
     1      |    John     |     X      |
----------------------------------------
     2      |    John     |     Y      |
----------------------------------------
     3      |    Sam      |     X      |
----------------------------------------
     4      |    May      |     Y      |

结果:

A      |      B      |     C      |
----------------------------------------
     1      |    John     |     X      |
----------------------------------------
     3      |    Sam      |     X      |
----------------------------------------
     4      |    May      |     Y      |
bttbmeg0

bttbmeg01#

可以使用DISTINCT ON子句:

select distinct on (b)
a, b, c
from data
order by b, a

在这种情况下,您将获得每个唯一B值中的第一行。
如果需要使用特殊条件进行筛选,也可以使用WINDOW FUNCTIONS或GROUP BY子句。

7ivaypg9

7ivaypg92#

首先,您可以为每个名称计算'X'和'Y'的出现次数(这是x_or_y所做的),然后只选择count = 1的名称

with x_or_y as (
select a, b, c, 
       count(case when upper(c) in ('X', 'Y') then 1 else 0 end) over (partition by b order by a) xy_cnt
  from test_t
 )
 
select a, b, c
  from x_or_y
 where xy_cnt = 1;

enter link description here

相关问题