PostgreSQL一个ID多个值
我有一个Postgres表,其中一个id可能有多个通道值,如下所示PostgreSQL一个ID多个值,postgresql,Postgresql,我有一个Postgres表,其中一个id可能有多个通道值,如下所示 ID |Channel | Column 3 | Column 4 _____|________|__________|_________ 1 | Sports | x | null 1 | Organic| x | z 2 | Organic| null | q 3 | Arts | b | w 3 | Organic| e
ID |Channel | Column 3 | Column 4
_____|________|__________|_________
1 | Sports | x | null
1 | Organic| x | z
2 | Organic| null | q
3 | Arts | b | w
3 | Organic| e | r
4 | Sports | sp | t
没有ID将有一个重复的频道名称,没有ID将是体育和艺术。也就是说,ID1可以有一个体育和有机频道,一个体育和艺术频道,但不能有两个体育或两个有机条目,也不能有体育和艺术频道。我希望所有ID都在查询中,但如果有非有机通道,我更喜欢这样。我想要的结果是
ID |Channel | Column 3 | Column 4
_____|________|__________|_________
1 | Sports | x | null
2 | Organic| null | q
3 | Arts | b | w
4 | Sports | sp | t
我觉得这里有一些CTE,一个秩和分区,或者一些可以实现这个目的的东西,但我就是不明白。我只包括第3列和第4列,以显示有额外的列
有人对此处部署的代码有什么想法吗?您可以使用
DISTINCT on
和适当的ORDER BY
子句:
SELECT DISTINCT ON (id)
id, channel, column3, column4
FROM atable
ORDER BY id, channel = 'Organic';
这取决于这样一个事实,即
FALSE
我最终使用了一个排名高于函数
行号()在(按salesforce划分的id按大小写顺序,当通道为有机通道时,则为0,否则为1 end desc,timestamp desc),作为id列
我没有在原始问题中包括我有时间戳!现在可以了。谢谢谢谢劳伦兹。这对我给你的信息起了作用。我在最初的问题中没有包括更多的信息。你的回答是正确的,但我需要一个稍微不同的解决方案来得到我想要的。