I have the following tables
Table Farm
+---------+--------+-------------------+-----------+------------+
| 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 |
+---------+--------+-------------------+-----------+------------+
Table Gate
+---------+---------+------------+
| 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 |
+---------+---------+------------+
Table Origin
+--------+----------+
| ORI_ID | ORI_NAME |
+--------+----------+
| 1 | US |
| 2 | CA |
| 3 | MX |
+--------+----------+
Table Stock
+--------+--------+-------------------+
|Stock_ID| ORI_ID | Stock_TITLE |
+--------+--------+-------------------+
| 1 | 1 | P1 |
| 2 | 2 | P3 |
| 3 | 3 | Q4 |
| 4 | 3 | B3 |
+--------+--------+-------------------+
Table Results
+-----------+---------+---------+------------+------------+
| 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 |
+-----------+---------+---------+------------+------------+
Annotated Result table: Same as above ^
+-----------+---------+---------+------------+------------+
| 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
+-----------+---------+---------+------------+------------+
Computations required:
- Type can have only three values at most: {H, M, L};
- When all values are present, they are graded as followed: H=70 M=20 L=10
ALL unique casese are
Case {H,M} : H=80 M=20
- Case {M,L} : M=60 L=40
- Case {H,L} : H=90 L=10
- Case {H} : H=100
- Case {M} : M=100
- Case {L} : L=100
- Case {H,M,L} : H=70 M=20 L=10
Further Explanation
- Only Stock with with atleast one
GATE
, fully satisfied can get 100 points max- Example:
Q4
has 3 sets of 6GATES
; Only oneGATE
set has to be satsified (have a score present). - The points present must be Multiplied against the particular case it pertains Example:
Q4
has case {H,M,L} which means H=70; M=20; L=10 This would results in (70*100%)+(20*50%)+(10*100%)=90 (look back above at the Result table annotations)
2.
- Example:
- Points should still be considered and accounted for even when a gate hasn't been fully satisfied. The gate with MAX points earned should be kept when no gates have been fully satisfied. (Will provide further explanation if not understood)
If we Perform a query to make sense of the tables and data it will look like below
+---------+-----------+---------------+-----------+---------+-----------+---------+
| 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 |
+---------+-----------+---------------+-----------+---------+-----------+---------+
Desire Results
+---------+-------------------+-------+
| Origin | Stock | score |
+---------+-------------------+-------+
| US | P1 | 100 |
| US | P3 | 100 |
| CA | Q4 | 90 |
| MX | B3 | 93 |
+---------+-------------------+-------+
Since origin
has a stock
which consists of 3 different farms
and those farms
have 6 gates
each. As long as one gate
-set (numerically matching gates
) is scored to SOME value we can consider the entire STOCK
found completely. This is the only way a stock
can be considered 100.
Moreover and to reiterate, STOCK
Q4 has case: {H,M,L} and all of gate (4)
was found to some degree. gate
4 has the score (100% * H) + (50% * M) + (100% * L) which equals (70*100%) + (20*50%) + (10*100%) = 90
Hence: (Taken from above)
| CA | Q4 | 90 |
QED
So what I need help with is creating the subquery/subselect to do make this computation work. I set up everything in the scenario above (along with a query in progress that I've been working with) in the SQL fiddle link below.
Thanks greatly stackoverflow community.
I would take your original query to get the second last table and change the
Select
by adding usedistinct
(found here) and only select Origin, Stock and the calculation for the Score. For example if the score is an average of all of them it would beAVG(Score)
whereScore
would be what you fetched in the original query. If you want to use only a small subset of the items that have the same Origin and Stock to calculate the Score I would use a subquery, with the where matching the Origin and Stick ids, in the select so you have:Hope this helps.
Here is the query I've been working on. However, the results are slighly different from the ones you've posted in your question:
Result:
Let me know if this did the trick.