簡體   English   中英

PostgreSQL 中字符串數組中空值的計數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM