[英]Count of empty values in string array in PostgreSQL
我想检查 Projects 列值对于 PartNo 和 PartName 列的所有相同值是否具有相同的值。 项目列数据类型是字符 variyng[]。 例如:
型号 | 零件名称 | 项目 |
---|---|---|
1个 | 3个 | 6;5 |
1个 | 3个 | |
1个 | 3个 | |
3个 | 2个 | 5;5 |
在这种情况下,对于相同的 PartName(3) 和 PartNo(1),Projects 具有不同的值 (6;5) 和 ()。
这是我的查询,但它不适用于项目列中的空字符 variyng[]!
SELECT COUNT(*) from (
select c.partno, c.partname
FROM unnest(items) as c
GROUP BY c.partno, c.partname
HAVING COUNT(distinct c.projects) > 1) as xxx
INTO errCount;
IF errCount > 0 THEN
RETURN QUERY
SELECT 0 as status, format('Projects value should be the same for all Codes of the Part No %s and Name %s',c.partno,c.partname) as message
FROM unnest(items) as c
GROUP BY c.partno, c.partname
HAVING COUNT(distinct c.projects) > 1
;
RETURN;
END IF;
在项目中有两个不同值(不是空数组)的情况下,它有效。
您可以使用这样的查询
合并
将数组[null]中的null转换为null的函数
WITH tt AS (
SELECT
partno,
partname,
COALESCE ( project, ARRAY [null] ) AS pro
FROM
tab1
) SELECT
*,
COUNT ( pro ) AS num
FROM
tt
GROUP BY
partno,
partname,
pro
创建测试表:
CREATE TABLE "tab1" (
"pk" serial4 primary key,
"partno" int4,
"partname" int4,
"project" varchar[]
);
INSERT INTO "tab1" (partno,partname,project) VALUES ( 1, 3, '{6,5}');
INSERT INTO "tab1" (partno,partname,project) VALUES ( 1, 3, NULL);
INSERT INTO "tab1" (partno,partname,project) VALUES ( 1, 3, NULL);
INSERT INTO "tab1" (partno,partname,project) VALUES ( 3, 2, '{5,5}');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.