MS Access 实现查找各组合最低成本及对应记录的查询方法
首先假设你的表名为 combo_costs,可根据实际命名替换,以下是对应需求的SQL实现:
方案1:获取各组合与对应最小成本的映射集合
使用分组聚合即可直接得到所需结果:
SELECT Combination, MIN(Cost) AS min_total_cost FROM combo_costs GROUP BY Combination;
查询输出示例:
| Combination | min_total_cost |
|---|---|
| 345678 | 15 |
| 456343 | 12 |
方案2:获取符合最小成本要求的Combo ID集合
先通过子查询拿到每个组合的最低成本,再关联原表匹配对应记录即可:
输出合并为逗号分隔的字符串
-- MySQL语法 SELECT GROUP_CONCAT(`Combo ID` SEPARATOR ',') AS valid_combo_ids FROM combo_costs t1 JOIN ( SELECT Combination, MIN(Cost) AS min_cost FROM combo_costs GROUP BY Combination ) t2 ON t1.Combination = t2.Combination AND t1.Cost = t2.min_cost;
不同数据库的字符串拼接函数差异:
- PostgreSQL / SQL Server:替换
GROUP_CONCAT为STRING_AGG("Combo ID", ',')- Oracle:替换为
LISTAGG("Combo ID", ',') WITHIN GROUP (ORDER BY "Combo ID")
同时注意带空格的字段名转义规则:MySQL用反引号、PostgreSQL用双引号、SQL Server也可用方括号[Combo ID]
输出逐行展示单个Combo ID
只需修改SELECT语句即可:
SELECT t1.`Combo ID` FROM combo_costs t1 JOIN ( SELECT Combination, MIN(Cost) AS min_cost FROM combo_costs GROUP BY Combination ) t2 ON t1.Combination = t2.Combination AND t1.Cost = t2.min_cost;
输出结果为:1、2、4,逐行返回。
内容的提问来源于stack exchange,提问作者Chris Y.
相关产品推荐
相关产品推荐

