我有一个数据库视图。
此时,它返回的行可能在id
列中具有重复的条目。
我想执行以下操作:
SELECT DISTINCT ON (id) USING DESCRIBED BELOW RULE -- of course it is not valid sql
id
type
type
列可以包含3个值:
x
y
z
如果存在id
相同但type
不同的行,则DISTINCT
的规则如下:
x
的行y
,请选择类型为x
的行z
也没有x
,请选择类型为y
的行所以,如果我有3行:
id type
1 'y'
1 'x'
2 'z'
预期结果将是
id type
1 'x'
2 'z'
有没有办法做到这一点?
答案 0 :(得分:1)
如果您的值按真实字母顺序(例如,在您的示例中)按顺序排序,那将非常简单-您只需对值进行排序:
JSON.parse()
如果不是这样,您将需要一个表来存储排名值及其排名顺序。或者像我一样用子查询来模拟它:
SELECT DISTINCT ON (id)
id,
type
FROM mytable m
ORDER BY id, type
如果类型数据确实是固定的,则可以考虑使用enum type,它是默认的有序类型。该查询看起来像上面的第一个查询:
但是请注意,更改枚举(添加,删除,重新排列值)可能非常困难。因此,仅在类型确实固定的情况下才建议使用。否则,请使用单独的带有外键的表将您带回到第二部分。
答案 1 :(得分:1)