如何获取数据表单列所有可能的取值组合(支持可变行数场景)
适配可变行数的最优实现方案
方案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
相关产品推荐
相关产品推荐

