我有以下表格
表农场
+---------+--------+-------------------+-----------+------------+
| FARM_ID |Stock_ID| FARM_TITLE | Size | FARM_VALUE |
+---------+--------+-------------------+-----------+------------+
| 2 | 1 | AgriZone | M | 202 |
| 3 | 1 | Cow Mill | L | 11 |
| 4 | 2 | Beef Farm | H | 540 |
| 5 | 2 | CattleOne | M | 1080 |
| 6 | 2 | FarmOne | L | 455 |
| 7 | 3 | Perdue | H | 333 |
| 8 | 4 | Holstein | M | 825 |
| 10 | 1 | Dotterers | H | 98 |
+---------+--------+-------------------+-----------+------------+
Run Code Online (Sandbox Code Playgroud)
表门
+---------+---------+------------+
| GATE_ID | FARM_ID | FARM_VALUE |
+---------+---------+------------+
| 1 | 2 | 0 |
| 1 | 3 | 0 |
| 1 | 4 | 540 |
| 2 | 4 | 550 |
| 3 | 4 | 560 |
| 4 | 4 | 570 |
| 5 | 4 | 580 |
| 6 | 4 | 590 |
| 1 | 5 | 1080 |
| 2 | 5 | 1100 |
| 3 | 5 | 1120 |
| 4 | 5 | 1140 |
| 5 | 5 | 1160 |
| 6 | 5 | 1180 |
| 1 | 6 | 455 |
| 2 | 6 | 536 |
| 3 | 6 | 617 |
| 4 | 6 | 698 |
| 5 | 6 | 779 |
| 6 | 6 | 860 |
| 1 | 7 | 0 |
| 1 | 8 | 0 |
| 1 | 10 | 0 |
+---------+---------+------------+
Run Code Online (Sandbox Code Playgroud)
表原产地
+--------+----------+
| ORI_ID | ORI_NAME |
+--------+----------+
| 1 | US |
| 2 | CA |
| 3 | MX |
+--------+----------+
Run Code Online (Sandbox Code Playgroud)
表股票
+--------+--------+-------------------+
|Stock_ID| ORI_ID | Stock_TITLE |
+--------+--------+-------------------+
| 1 | 1 | P1 |
| 2 | 2 | P3 |
| 3 | 3 | Q4 |
| 4 | 3 | B3 |
+--------+--------+-------------------+
Run Code Online (Sandbox Code Playgroud)
表结果
+-----------+---------+---------+------------+------------+
| RESULT_ID | FARM_ID | GATE_ID | FARM_VALUE | Score% |
+-----------+---------+---------+------------+------------+
| 1 | 7 | 1 | 333 | 100 |
| 2 | 8 | 1 | 825 | 100 |
| 3 | 6 | 1 | 455 | 40 |
| 4 | 6 | 2 | 536 | 0 |
| 5 | 6 | 3 | 617 | 0 |
| 6 | 6 | 4 | 698 | 100 |
| 7 | 6 | 5 | 779 | 0 |
| 8 | 6 | 6 | 860 | 10 |
| 9 | 4 | 1 | 540 | 100 |
| 10 | 4 | 2 | 550 | 90 |
| 11 | 4 | 3 | 560 | 0 |
| 12 | 4 | 4 | 570 | 100 |
| 13 | 4 | 5 | 580 | 10 |
| 14 | 4 | 6 | 590 | 0 |
| 15 | 5 | 1 | 1080 | 0 |
| 16 | 5 | 2 | 1100 | 0 |
| 17 | 5 | 3 | 1120 | 0 |
| 18 | 5 | 4 | 1140 | 50 |
| 19 | 5 | 5 | 1160 | 0 |
| 20 | 5 | 6 | 1180 | 100 |
| 21 | 3 | 1 | 11 | 100 |
| 22 | 10 | 1 | 98 | 90 |
| 23 | 2 | 1 | 202 | 100 |
+-----------+---------+---------+------------+------------+
Run Code Online (Sandbox Code Playgroud)
带注释的结果表:与上面相同^
+-----------+---------+---------+------------+------------+
| RESULT_ID | FARM_ID | GATE_ID | FARM_VALUE | Score% |
+-----------+---------+---------+------------+------------+
+-----------+---------+---------+------------+------------+
| 1 | 7 | 1 | 333 | 100 | <--|H-Case {H}
+-----------+---------+---------+------------+------------+
+-----------+---------+---------+------------+------------+
| 2 | 8 | 1 | 825 | 100 | <--|M-Case {M}
+-----------+---------+---------+------------+------------+
+-----------+---------+---------+------------+------------+
| 3 | 6 | 1 | 455 | 40 |
| 4 | 6 | 2 | 536 | 0 |
| 5 | 6 | 3 | 617 | 0 |
| 6 | 6 | 4 | 698 | 100 | <--|L
| 7 | 6 | 5 | 779 | 0 | |
| 8 | 6 | 6 | 860 | 10 | |
+-----------+---------+---------+------------+------------+ |
| 9 | 4 | 1 | 540 | 100 | |
| 10 | 4 | 2 | 550 | 90 | |
| 11 | 4 | 3 | 560 | 0 | |
| 12 | 4 | 4 | 570 | 100 | <--+M-case {H,M,L}
| 13 | 4 | 5 | 580 | 10 | |
| 14 | 4 | 6 | 590 | 0 | |
+-----------+---------+---------+------------+------------+ |
| 15 | 5 | 1 | 1080 | 0 | |
| 16 | 5 | 2 | 1100 | 0 | |
| 17 | 5 | 3 | 1120 | 0 | |
| 18 | 5 | 4 | 1140 | 50 | <--|H
| 19 | 5 | 5 | 1160 | 0 |
| 20 | 5 | 6 | 1180 | 100 |
+-----------+---------+---------+------------+------------+
+-----------+---------+---------+------------+------------+
| 21 | 3 | 1 | 11 | 100 | <--|L
| 22 | 10 | 1 | 98 | 90 | <--+H-case {H,M,L}
| 23 | 2 | 1 | 202 | 100 | <--|M
+-----------+---------+---------+------------+------------+
Run Code Online (Sandbox Code Playgroud)
需要计算:
所有独特的案例都是
案例{H,M}:H = 80 M = 20
进一步说明
GATE,完全满意可以获得100点最多
Q4有3套6 GATES; 只有一GATE组必须满足(有分数).Q4具有案例{H,M,L},这意味着H = 70; M = 20; L = 10这将导致(70*100%)+(20*50%)+(10*100%)= 90 (回顾上面的Result表注释)如果我们执行查询以理解表和数据,它将如下所示
+---------+-----------+---------------+-----------+---------+-----------+---------+
| Origin | Stock | Farm Title | Farm Value| Gate | Size | Score |
+---------+-----------+---------------+-----------+---------+-----------+---------+
| US | P1 | Perdue | 333 | 1 | H | 100 |
| US | P3 | Holstein | 825 | 1 | M | 100 |
| CA | Q4 | FarmOne | 455 | 1 | L | 40 |
| CA | Q4 | FarmOne | 536 | 2 | L | 0 |
| CA | Q4 | FarmOne | 617 | 3 | L | 0 |
| CA | Q4 | FarmOne | 698 | 4 | L | 100 |
| CA | Q4 | FarmOne | 779 | 5 | L | 0 |
| CA | Q4 | FarmOne | 860 | 6 | L | 10 |
| CA | Q4 | Beef Farm | 540 | 1 | H | 0 |
| CA | Q4 | Beef Farm | 550 | 2 | H | 90 |
| CA | Q4 | Beef Farm | 560 | 3 | H | 0 |
| CA | Q4 | Beef Farm | 570 | 4 | H | 100 |
| CA | Q4 | Beef Farm | 580 | 5 | H | 10 |
| CA | Q4 | Beef Farm | 590 | 6 | H | 0 |
| CA | Q4 | CattleOne | 1080 | 1 | M | 0 |
| CA | Q4 | CattleOne | 1100 | 2 | M | 0 |
| CA | Q4 | CattleOne | 1120 | 3 | M | 0 |
| CA | Q4 | CattleOne | 1140 | 4 | M | 50 |
| CA | Q4 | CattleOne | 1160 | 5 | M | 100 |
| CA | Q4 | CattleOne | 1180 | 6 | M | 0 |
| MX | B3 | Cow Mill | 11 | 1 | L | 100 |
| MX | B3 | Dotterers | 98 | 1 | H | 90 |
| MX | B3 | AgriZone | 202 | 1 | M | 100 |
+---------+-----------+---------------+-----------+---------+-----------+---------+
Run Code Online (Sandbox Code Playgroud)
欲望结果
+---------+-------------------+-------+
| Origin | Stock | score |
+---------+-------------------+-------+
| US | P1 | 100 |
| US | P3 | 100 |
| CA | Q4 | 90 |
| MX | B3 | 93 |
+---------+-------------------+-------+
Run Code Online (Sandbox Code Playgroud)

由于origin有stock3个不同farms,每个farms有6 gates个.只要将一组gate(数字匹配gates)评分为某个值,我们就可以STOCK完全考虑整个发现.这是一个stock可以被认为是100 的唯一方法.
此外,并重申,STOCKQ4有案例:{H,M,L},并且gate (4)在某种程度上发现了所有案例.gate4得分(100%*H)+(50%*M)+(100%*L)等于(70*100%)+(20*50%)+(10*100%)= 90
因此:(取自上面)
| CA | Q4 | 90 |
Run Code Online (Sandbox Code Playgroud)
QED
所以我需要帮助的是创建子查询/子选择来使这个计算工作.我在下面的SQL小提琴链接中设置了上面场景中的所有内容(以及我正在使用的正在进行的查询).
非常感谢stackoverflow社区.
Select我将采用您的原始查询来获取倒数第二个表,并通过添加使用distinct(在此处找到)来更改,并且仅选择原产地、库存和分数的计算。例如,如果分数是所有分数的平均值,则它将是您在原始查询中获取的内容AVG(Score)。Score如果您只想使用具有相同 Origin 和 Stock 的项目的一小部分来计算分数,我将使用子查询,其中 where 与 Origin 和 Stick id 匹配,在选择中,这样您就可以:
Select Origin,
Stock,
(select calculation(Score) from tables where tables.stock_id = .... tables.origin_id = .....)
From....
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助。