在执行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真棒,如果我不知道蓝色是一个值怎么办。比如它可以是绿色、蓝色、橙色等,但我希望那些不知道实际值的颜色排在红色之前。好吧,太棒了,如果我不知道蓝色是一个值呢。因为它可以是绿色、蓝色、橙色等,但我希望这些颜色在不知道实际值的情况下,排在红色之前。