在执行Select查询时,如何在Postgresql中忽略具有特定值的数据行?

在执行Select查询时,如何在Postgresql中忽略具有特定值的数据行?,sql,postgresql,Sql,Postgresql,因此,当我按某一列进行查询时,有时会返回多行数据,因为另一列不同。假设我想在第二列具有某个值时忽略某些行,但仅当另一行中存在其他值时。下面是一个例子 Name Color Tom Blue Tom Red Frank Red 比如说,当我在Name列下查询时,值为Tom,我得到两行,一行颜色为蓝色,另一行颜色为红色。假设我只对蓝色感兴趣,所以我想忽略以红色作为值的行,但是仅当每个名称有多个颜色实例时,如此处所示。例如,如果我在Frank下按名称查询,我不想因为该行的颜

因此,当我按某一列进行查询时,有时会返回多行数据,因为另一列不同。假设我想在第二列具有某个值时忽略某些行,但仅当另一行中存在其他值时。下面是一个例子

Name    Color
Tom     Blue
Tom     Red
Frank   Red

比如说,当我在Name列下查询时,值为Tom,我得到两行,一行颜色为蓝色,另一行颜色为红色。假设我只对蓝色感兴趣,所以我想忽略以红色作为值的行,但是仅当每个名称有多个颜色实例时,如此处所示。例如,如果我在Frank下按名称查询,我不想因为该行的颜色是红色而忽略该行。希望这是有道理的

我不确定这是否是您要寻找的答案,但简单的方法是将结果限制为一条记录:

select Name, Color
from yourTable
where Name = 'Tom'
limit 1;
如果需要获取更多记录,可以使用CTE添加行号并获取行号为1的记录

with res as
(
    select Name, Color, row_number() over (partition by name) RN
    from yourTable
)
select Name, Color
from res
where RN = 1;

我不确定这是否是您要寻找的答案,但简单的方法是将结果限制在一条记录内:

select Name, Color
from yourTable
where Name = 'Tom'
limit 1;
如果需要获取更多记录,可以使用CTE添加行号并获取行号为1的记录

with res as
(
    select Name, Color, row_number() over (partition by name) RN
    from yourTable
)
select Name, Color
from res
where RN = 1;

行号根据所需优先级有条件地显示颜色,例如,如果首选“蓝色”

select Name,Color 
from (
    select *, row_number() over(partition by name order by case color
                                when 'Red' then 2 
                                when 'Blue' then 1 end) rn
from dd
) t
where rn = 1   
当你需要除“红色”以外的所有颜色时,除了“红色”是唯一的颜色

select Name,Color 
from (
    select *, count(*) over (partition by name) as cnt
    from (
      /* example data*/
        select 'Tom' as Name,  'Blue' as Color
        union all
        select 'Tom' ,'Red'
        union all
        select 'Tom' ,'Green'
        union all
        select 'Frank' ,'Red'
        )dd
) t
where cnt = 1 or Color !='Red'

行号根据所需优先级有条件地显示颜色,例如,如果首选“蓝色”

select Name,Color 
from (
    select *, row_number() over(partition by name order by case color
                                when 'Red' then 2 
                                when 'Blue' then 1 end) rn
from dd
) t
where rn = 1   
当你需要除“红色”以外的所有颜色时,除了“红色”是唯一的颜色

select Name,Color 
from (
    select *, count(*) over (partition by name) as cnt
    from (
      /* example data*/
        select 'Tom' as Name,  'Blue' as Color
        union all
        select 'Tom' ,'Red'
        union all
        select 'Tom' ,'Green'
        union all
        select 'Frank' ,'Red'
        )dd
) t
where cnt = 1 or Color !='Red'

我想这就是你所看到的,它只会选择名称为Tom,颜色为蓝色的值

SELECT * FROM Table WHERE (Name = 'Tom') AND (Color = 'Blue')

我想这就是你所看到的,它只会选择名称为Tom,颜色为蓝色的值

SELECT * FROM Table WHERE (Name = 'Tom') AND (Color = 'Blue')

你喜欢什么颜色?我的意思是,当你选择Tom时,如何选择蓝色或红色?因此,在我给出的示例中,当选择Tom时,蓝色是首选颜色,你更喜欢什么颜色?我的意思是,当你选择Tom时,如何选择蓝色或红色?因此,对于我给出的示例,当Tom被选择时,蓝色将是首选颜色。OK真棒,如果我不知道蓝色是一个值怎么办。比如它可以是绿色、蓝色、橙色等,但我希望那些不知道实际值的颜色排在红色之前。好吧,太棒了,如果我不知道蓝色是一个值呢。因为它可以是绿色、蓝色、橙色等,但我希望这些颜色在不知道实际值的情况下,排在红色之前。