You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL如何查询同一产品对应多个cod_1、cod_2编码

PostgreSQL多值产品查询解决方案

你可以直接使用以下SQL语句实现需求,适配你给出的表结构和输出要求:

1. 测试环境预置(可选,用于本地验证)

-- 建表
CREATE TABLE product_tab (
    cod_1 INT,
    cod_2 INT,
    prod VARCHAR(10)
);
-- 插入示例数据
INSERT INTO product_tab VALUES
(10, 33, 'A'),
(2, 78, 'B'),
(5, 105, 'A'),
(7, 34, 'D'),
(3, NULL, 'D');

2. 核心查询语句

WITH prod_agg AS (
    SELECT
        prod,
        -- 聚合拼接所有非空cod_1,按从大到小排序
        STRING_AGG(cod_1::VARCHAR, ' and ' ORDER BY cod_1 DESC) AS cod1_vals,
        COUNT(cod_1) AS cod1_num,
        -- 聚合拼接所有非空cod_2,按从大到小排序
        STRING_AGG(cod_2::VARCHAR, ' and ' ORDER BY cod_2 DESC) AS cod2_vals,
        COUNT(cod_2) AS cod2_num
    FROM product_tab
    GROUP BY prod
    -- 只保留至少一个字段有多个值的产品
    HAVING COUNT(cod_1) > 1 OR COUNT(cod_2) > 1
)
SELECT
    CONCAT(
        prod, ' has cod_1 = ', cod1_vals,
        -- cod_2有多值时才拼接对应描述
        CASE WHEN cod2_num > 1 THEN CONCAT(' ; ', prod, ' has code_2 = ', cod2_vals) ELSE '' END,
        ';'
    ) AS output_result
FROM prod_agg;

3. 输出效果

执行后返回结果和你要求的格式完全匹配:

A has cod_1 = 10 and 5 ; A has code_2 = 33 and 105;
D has cod_1 = 7 and 3;

关键逻辑说明

  • 用CTE先按产品分组,通过STRING_AGG聚合函数拼接同一产品下的所有字段值,支持自定义分隔符和排序规则
  • COUNT(字段名)会自动忽略NULL值,符合示例中D的cod_2为NULL不参与统计的需求
  • 外层用CASE判断是否需要拼接cod_2的描述,避免单值产品输出冗余内容

内容的提问来源于stack exchange,提问作者pouchewar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 16:45:01