mysql - SQL做数学找到最小值然后插入列
问题描述
我有 2 张桌子这是我的第一张桌子
+-----------+---------+------+------+---------+---------+-------------+
| name | squad | val1 | val2 | result1 | result2 | finalresult |
+-----------+---------+------+------+---------+---------+-------------+
| Andrew | alpha | 1 | 2 | | | |
| Brian | bravo | 3 | 4 | | | |
| Chris | charlie | 5 | 6 | | | |
| Danny | alpha | 7 | 8 | | | |
| Elise | bravo | 9 | 10 | | | |
| Fransisca | charlie | 11 | 12 | | | |
+-----------+---------+------+------+---------+---------+-------------+
这是我的第二张桌子
+---------+----------+------+------+
| squad | subsquad | val3 | val4 |
+---------+----------+------+------+
| alpha | air | 1 | 2 |
| alpha | land | 3 | 4 |
| alpha | sea | 5 | 6 |
| bravo | air | 1 | -2 |
| bravo | land | 3 | -4 |
| bravo | sea | 5 | -6 |
| charlie | air | -1 | 2 |
| charlie | land | -3 | 4 |
| charlie | sea | -5 | 6 |
+---------+----------+------+------+
我想将数据插入到 result1、result2 和 finalresult
finalresult = MIN ((val1+val3) * (val2+val4)for every subsquad)
result1 = val 3 that have smallest value in finalresult
result2 = val 4 that have smallest value in finalresult
这是我想实现的示例表
+-----------+---------+------+------+---------+---------+-------------+
| name | squad | val1 | val2 | result1 | result2 | finalresult |
+-----------+---------+------+------+---------+---------+-------------+
| Andrew | alpha | 1 | 2 | 1 | 2 | 8 |
| Brian | bravo | 3 | 4 | 8 | -2 | -16 |
| Chris | charlie | 5 | 6 | 0 | 12 | 0 |
| Danny | alpha | 7 | 8 | 8 | 10 | 80 |
| Elise | bravo | 9 | 10 | 14 | 4 | 56 |
| Fransisca | charlie | 11 | 12 | 6 | 18 | 108 |
+-----------+---------+------+------+---------+---------+-------------+
这就是我所做的
SELECT name, a.squad, val1, val2, result1, result2, ((val1+val3)*(val2+val4)) as finalresult, b.squad, subsquad, val3, val4
FROM a
LEFT JOIN b ON a.squad=b.squad
解决方案
查看此 http://sqlfiddle.com/#!9/e995b/1
select ad.* from (
SELECT name, a.squad, val1, val2, (val1+val3) as result1, (val2+val4) as result2, ((val1+val3)*(val2+val4)) as finalresult
FROM a
CROSS JOIN b ON a.squad=b.squad
) as ad
inner join (
SELECT name, min((val1+val3)*(val2+val4)) as finalresult
FROM a
LEFT JOIN b ON a.squad=b.squad
group by name,a.squad
) as f
on ad.name = f.name and ad.finalresult = f.finalresult
推荐阅读
- buildfire - Buildfire:保存到数据存储区会产生错误
- android - 反应原生 Android 图像在 resizeMode:'contain' 上模糊
- python - 使用 matplotlib 重叠条但希望它们并排
- javascript - 如何更改内容
基于选择选项
- python - 如何在 QStandardItem 图标上方显示文本?
- c# - 如何阻止属性重置
- azure - Azure SQL 数据库的可视化查询设计器?
- python - 是否可以删除输出文件的行?
- html - 我需要以某种方式定位文本的背景
- javascript - 与 GitHub API 用户名搜索相关的函数出现问题