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

如何在PostgreSQL中按分区(country)复制SQL行并添加标识列

实现方案

你可以通过**交叉连接(CROSS JOIN)**结合存在性判断来实现这个需求,具体步骤和SQL语句如下:

核心思路

  1. 提取所有唯一的country值,作为结果中的partition列;
  2. 提取原表中所有code行(保留重复值,匹配你需求里出现重复A的情况);
  3. 将两者做交叉连接,得到每个国家与所有code的全量组合;
  4. 通过判断原表中是否存在对应的(country, code)组合,生成布尔类型的indicator列。

PostgreSQL 查询语句

WITH all_partitions AS (
    SELECT DISTINCT country AS partition
    FROM your_table  -- 替换成你的实际表名
),
all_codes AS (
    SELECT code
    FROM your_table
)
SELECT
    ap.partition,
    ac.code,
    EXISTS (
        SELECT 1
        FROM your_table t
        WHERE t.country = ap.partition
          AND t.code = ac.code
    ) AS indicator
FROM all_partitions ap
CROSS JOIN all_codes ac
ORDER BY ap.partition, ac.code;

语句说明

  • all_partitions CTE:获取所有唯一的国家,作为每个分区的基础;
  • all_codes CTE:获取原表中全部code记录(保留重复项,确保结果和需求中的code数量、重复情况一致);
  • CROSS JOIN:让每个分区和所有code做全量关联,生成所有可能的组合;
  • EXISTS子查询:检查当前分区国家与code的组合是否存在于原表中,存在则返回True,否则返回False;
  • ORDER BY:保证结果按分区、code排序,和示例输出结构一致(可根据实际需求调整或移除)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 09:13:31