如何在数组上进行相等测试

问题描述 投票:0回答:1

我正在尝试聚合ID上的值。如果它们都相同,我会返回它们,但如果遇到这两个值,则必须创建另一个值“C”。

CREATE TABLE foo (
    fooid int,
    foocomm text
); 

INSERT INTO foo (fooid,foocomm)
VALUES (1,'A'); 
INSERT INTO foo (fooid,foocomm)
VALUES (1,'B'); 
INSERT INTO foo (fooid,foocomm)
VALUES (2,'A');
SELECT 
  CASE 

    WHEN array_remove(array_agg(foocomm),NULL) = {'A'} THEN 'A'
    WHEN array_remove(array_agg(foocomm),NULL) = {'B'} THEN 'B'
    WHEN array_remove(array_agg(foocomm),NULL) = {'A','B'} THEN 'C'
  END AS BAR

FROM foo
GROUP BY fooid;

它应该屈服

fooid,foocomm
1, 'C'
2, 'A'
sql postgresql
1个回答
0
投票
t=# SELECT fooid,
  CASE
    WHEN array_remove(array_agg(foocomm order by foocomm),NULL) = '{A}' THEN 'A'
    WHEN array_remove(array_agg(foocomm order by foocomm),NULL) = '{B}' THEN 'B'
    WHEN array_remove(array_agg(foocomm order by foocomm),NULL) = '{A,B}' THEN 'C'
  END AS BAR
FROM foo
GROUP BY fooid;
 fooid | bar
-------+-----
     1 | C
     2 | A
(2 rows)

您的查询有效,只需修复数组文本表示:

https://www.postgresql.org/docs/current/static/arrays.html#ARRAYS-INPUT

© www.soinside.com 2019 - 2024. All rights reserved.