如何用MySQL生成FRUIT的所有组合并计算对应价格总和?
实现MARKET表中水果的所有非空组合及价格总和计算
可以通过递归公共表表达式(CTE)实现这个需求,生成所有非空水果组合并计算对应价格总和,具体方案如下:
1. 插入测试数据
INSERT INTO MARKET(FRUIT, PRICE) VALUES ('APPLE', 2), ('BANANA', 3), ('GRAPE', 1);
2. 查询所有非空组合及价格总和
WITH RECURSIVE fruit_combinations AS ( -- 初始数据集:单个水果的组合 SELECT FRUIT AS combo, PRICE AS total_price, FRUIT AS last_fruit FROM MARKET UNION ALL -- 递归拼接组合:确保不生成重复组合 SELECT fc.combo || '+' || m.FRUIT, fc.total_price + m.PRICE, m.FRUIT FROM fruit_combinations fc JOIN MARKET m ON m.FRUIT > fc.last_fruit ) SELECT combo, total_price FROM fruit_combinations ORDER BY LENGTH(combo), combo;
3. 查询结果
combo total_price ---------------------- ----------- APPLE 2 BANANA 3 GRAPE 1 APPLE+BANANA 5 APPLE+GRAPE 3 BANANA+GRAPE 4 APPLE+BANANA+GRAPE 6
代码说明
- 递归CTE的初始阶段先提取每个单独的水果作为基础组合;
- 递归阶段通过
m.FRUIT > fc.last_fruit的JOIN条件,保证只拼接比当前组合最后一个水果排序靠后的水果,避免生成重复的组合(如不会出现BANANA+APPLE这类与APPLE+BANANA重复的结果); - 最终通过
ORDER BY LENGTH(combo), combo让结果按组合长度、名称排序,与需求的输出顺序一致。
内容的提问来源于stack exchange,提问作者yunju
相关产品推荐
相关产品推荐

