I have been trying to solve this for a while, and I am stumped.
I have two tables, and I am basically trying to combine them and pivot them. I'm doing it in MySQL.
Here are the tables:
pogo_dex:
ID | DexNum | Pokemon | Candy |
---|---|---|---|
1 | 1 | Bulbasaur | Bulbasaur |
2 | 2 | Ivysaur | Bulbasaur |
3 | 3 | Venusaur | Bulbasaur |
4 | 4 | Charmander | Charmander |
5 | 5 | Charmeleon | Charmander |
6 | 6 | Charizard | Charmander |
7 | 7 | Squirtle | Squirtle |
8 | 8 | Wartortle | Squirtle |
9 | 9 | Blastoise | Squirtle |
10 | 10 | Caterpie | Caterpie |
11 | 11 | Metapod | Caterpie |
pogo_meta:
ID | DexNum | Name | Form | Shadow | League | Tier |
---|---|---|---|---|---|---|
50 | 2 | Ivysaur | Great | 3 | ||
52 | 2 | Ivysaur | Shadow | Great | 3 | |
993 | 3 | Venusaur | Attackers | 7 | ||
822 | 3 | Venusaur | Master | 4 | ||
456 | 3 | Venusaur | Shadow | Ultra | 3 | |
11 | 3 | Venusaur | Shadow | Great | 2 | |
443 | 3 | Venusaur | Ultra | 3 | ||
804 | 3 | Venusaur | Shadow | Master | 4 | |
920 | 3 | Venusaur | Mega | Attackers | 1 | |
939 | 3 | Venusaur | Shadow | Attackers | 3 | |
3 | 3 | Venusaur | Great | 2 | ||
964 | 6 | Charizard | Shadow | Attackers | 4 | |
426 | 6 | Charizard | Shadow | Ultra | 2 | |
427 | 6 | Charizard | Ultra | 2 | ||
806 | 6 | Charizard | Shadow | Master | 4 | |
941 | 6 | Charizard | Mega X | Attackers | 3 | |
907 | 6 | Charizard | Mega Y | Attackers | 0.9 | |
97 | 6 | Charizard | Shadow | Great | 3 | |
815 | 6 | Charizard | Master | 4 | ||
127 | 6 | Charizard | Great | 3 | ||
1004 | 6 | Charizard | Attackers | 7 | ||
823 | 9 | Blastoise | Master | 5 | ||
919 | 9 | Blastoise | Mega | Attackers | 1 | |
104 | 9 | Blastoise | Great | 3 | ||
429 | 9 | Blastoise | Ultra | 2 | ||
328 | 12 | Butterfree | Great | 5 | ||
968 | 15 | Beedrill | Mega | Attackers | 4 | |
105 | 15 | Beedrill | Great | 3 | ||
45 | 18 | Pidgeot | Great | 2 | ||
441 | 18 | Pidgeot | Ultra | 2 |
In the end, this is what I want to get out of them:
ID | DexNum | Pokemon | Candy | Attackers | Master | Ultra | Great |
---|---|---|---|---|---|---|---|
1 | 1 | Bulbasaur | Bulbasaur | 1 | 4 | 3 | 2 |
2 | 2 | Ivysaur | Bulbasaur | 1 | 4 | 3 | 2 |
3 | 3 | Venusaur | Bulbasaur | 1 | 4 | 3 | 2 |
4 | 4 | Charmander | Charmander | 0.9 | 4 | 2 | 3 |
5 | 5 | Charmeleon | Charmander | 0.9 | 4 | 2 | 3 |
6 | 6 | Charizard | Charmander | 0.9 | 4 | 2 | 3 |
7 | 7 | Squirtle | Squirtle | 1 | 5 | 2 | 3 |
8 | 8 | Wartortle | Squirtle | 1 | 5 | 2 | 3 |
9 | 9 | Blastoise | Squirtle | 1 | 5 | 2 | 3 |
10 | 10 | Caterpie | Caterpie | 0 | 0 | 0 | 5 |
11 | 11 | Metapod | Caterpie | 0 | 0 | 0 | 5 |
I know I have to left join the pogo_dex to the pogo_tiers to get the Candy associated with the Tiers. So, I wrote this:
SELECT b.Candy, a.League, Min(a.Tier) as Tier, a.Shadow, a.Form from `pogo_meta` a left join `pogo_dex` b on a.DexNum=b.DexNum GROUP BY b.Candy, a.League, a.Shadow, a.Form ORDER BY CAST(a.DexNum As DECIMAL) ASC
Then, I joined that to the rest like this:
SELECT c.DexNum, c.Pokemon, d.Shadow, d.Form, d.League, d.Tier FROM `pogo_dex` c LEFT JOIN (SELECT b.Candy, a.League, Min(a.Tier) as Tier, a.Shadow, a.Form from `pogo_meta` a left join `pogo_dex` b on a.DexNum=b.DexNum GROUP BY b.Candy, a.League, a.Shadow, a.Form ORDER BY CAST(a.DexNum As DECIMAL) ASC) d on c.Candy=d.Candy;
But now I'm stuck. How do I pivot it? I want to see the Min of each Tier for each Candy type.
CodePudding user response:
I tried to solve it; but result_set doesn't match. I share my code and result_set here. MySQL has no pivot function; but you can use case statement to achieve a similar result.
SELECT c.ID, c.DexNum, c.Pokemon, c.Candy,
MIN(case when d.League = 'Attackers' then d.Tier end) as Attackers,
MIN(case when d.League = 'Master' then d.Tier end) as Master,
MIN(case when d.League = 'Ultra' then d.Tier end) as Ultra,
MIN(case when d.League = 'Great' then d.Tier end) as Great
FROM pogo_dex c
LEFT JOIN
(SELECT b.Candy, a.Tier, a.Shadow, a.League, a.Form from pogo_tiers a
left join pogo_dex b on a.DexNum=b.DexNum
GROUP BY a.DexNum, a.Tier, b.Candy, a.League, a.Shadow, a.Form
ORDER BY a.DexNum, b.Candy, a.League, a.Form
) d
ON c.Candy=d.Candy
GROUP BY c.ID, c.DexNum, c.Pokemon, c.Candy;
Resulting query looks like this: I hope It helps somehow.
CodePudding user response:
use alises, your table1 AS a, your table2 AS b
there's lack of alises initialization do it.