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

如何获取数据表单列所有可能的取值组合(支持可变行数场景)

适配可变行数的最优实现方案

方案1:SQL实现(无需硬编码JOIN)

基于递归CTE实现,源数据行数变化时无需调整代码,兼容所有支持递归CTE的主流数据库(MySQL 8.0+、PostgreSQL、SQL Server、Oracle等):

WITH RECURSIVE source_data AS (
    -- 给原始数据加递增行号,用于避免生成重复组合
    SELECT col, ROW_NUMBER() OVER (ORDER BY col) AS row_num
    FROM 你的表名
),
combination AS (
    -- 递归初始节点:所有单元素组合
    SELECT col AS result, row_num
    FROM source_data
    UNION ALL
    -- 递归拼接:将已有组合和行号更大的元素拼接,生成更长的组合
    SELECT CONCAT(c.result, ',', s.col) AS result, s.row_num
    FROM combination c
    JOIN source_data s ON s.row_num > c.row_num
)
SELECT result FROM combination ORDER BY LENGTH(result), result;

执行后输出结果和要求的完全一致,所有非空组合无重复。

方案2:Python实现

如果是在脚本中处理数据,直接调用标准库的组合生成方法即可:

import itertools

# 替换为实际的数据源
raw_data = ["A", "B", "C"]
all_combinations = []

# 遍历所有非空子集的长度
for length in range(1, len(raw_data) + 1):
    # 生成指定长度的所有组合,转成逗号拼接字符串
    all_combinations.extend([",".join(item) for item in itertools.combinations(raw_data, length)])

# 输出结果
for res in all_combinations:
    print(res)

内容的提问来源于stack exchange,提问作者Sadegh Ghafari Yazdi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 01:21:03