有什么方法可以加入两个 Union All 列
Is there some way to join two of Union All columns
我正在制作英雄联盟 Api 我在数据库中有这样的项目
database
我有 sql 这样的代码来检查人们在游戏中购买这些物品的次数
SELECT
Items.Item,
count(Items.Item) as repeats
FROM
(
SELECT Item0 AS Item FROM playergame
UNION ALL
SELECT Item1 AS Item FROM playergame
UNION ALL
SELECT Item2 AS Item FROM playergame
UNION ALL
SELECT Item3 AS Item FROM playergame
UNION ALL
SELECT Item4 AS Item FROM playergame
UNION ALL
SELECT Item5 AS Item FROM playergame
UNION ALL
SELECT Item6 AS Item FROM playergame
) AS Items
GROUP BY
Items.Item
ORDER BY `repeats`
这段代码给了我类似的东西:
我想在右侧添加另一个 table 重复但这次添加到代码 WHERE 所以我做了这个代码:
SELECT
Items.Item,
count(Items.Item) as repeats,
count(ItemW.ItemW) as Wrepeats
FROM
(
SELECT Item0 AS Item FROM playergame
UNION ALL
SELECT Item1 AS Item FROM playergame
UNION ALL
SELECT Item2 AS Item FROM playergame
UNION ALL
SELECT Item3 AS Item FROM playergame
UNION ALL
SELECT Item4 AS Item FROM playergame
UNION ALL
SELECT Item5 AS Item FROM playergame
UNION ALL
SELECT Item6 AS Item FROM playergame
) AS Items
INNER JOIN
(
SELECT Item0 AS ItemW FROM playergame
UNION ALL
SELECT Item1 AS ItemW FROM playergame WHERE Win = 1
UNION ALL
SELECT Item2 AS ItemW FROM playergame WHERE Win = 1
UNION ALL
SELECT Item3 AS ItemW FROM playergame WHERE Win = 1
UNION ALL
SELECT Item4 AS ItemW FROM playergame WHERE Win = 1
UNION ALL
SELECT Item5 AS ItemW FROM playergame WHERE Win = 1
UNION ALL
SELECT Item6 AS ItemW FROM playergame WHERE Win = 1
)AS ItemW
ON Items.Item = ItemW.ItemW
GROUP BY
Items.Item
从这个 sql 我得到了这个结果
second result of sql
我想你想要:
SELECT i.Item, COUNT(*) as repeats,
SUM(CASE WHEN Win = 1 THEN 1 ELSE 0 END) as Wins
FROM (SELECT Item0 AS Item, Win FROM playergame
UNION ALL
SELECT Item1 AS Item, Win FROM playergame
UNION ALL
SELECT Item2 AS Item, Win FROM playergame
UNION ALL
SELECT Item3 AS Item, Win FROM playergame
UNION ALL
SELECT Item4 AS Item, Win FROM playergame
UNION ALL
SELECT Item5 AS Item, Win FROM playergame
UNION ALL
SELECT Item6 AS Item, Win FROM playergame
) i
GROUP BY i.Item
ORDER BY `repeats`;
也就是说,您应该修复数据结构。您应该有另一个名为 playergameItems
的 table,每个 "playergame" 一行,每个 item
一行。
我正在制作英雄联盟 Api 我在数据库中有这样的项目 database 我有 sql 这样的代码来检查人们在游戏中购买这些物品的次数
SELECT
Items.Item,
count(Items.Item) as repeats
FROM
(
SELECT Item0 AS Item FROM playergame
UNION ALL
SELECT Item1 AS Item FROM playergame
UNION ALL
SELECT Item2 AS Item FROM playergame
UNION ALL
SELECT Item3 AS Item FROM playergame
UNION ALL
SELECT Item4 AS Item FROM playergame
UNION ALL
SELECT Item5 AS Item FROM playergame
UNION ALL
SELECT Item6 AS Item FROM playergame
) AS Items
GROUP BY
Items.Item
ORDER BY `repeats`
这段代码给了我类似的东西:
我想在右侧添加另一个 table 重复但这次添加到代码 WHERE 所以我做了这个代码:
SELECT
Items.Item,
count(Items.Item) as repeats,
count(ItemW.ItemW) as Wrepeats
FROM
(
SELECT Item0 AS Item FROM playergame
UNION ALL
SELECT Item1 AS Item FROM playergame
UNION ALL
SELECT Item2 AS Item FROM playergame
UNION ALL
SELECT Item3 AS Item FROM playergame
UNION ALL
SELECT Item4 AS Item FROM playergame
UNION ALL
SELECT Item5 AS Item FROM playergame
UNION ALL
SELECT Item6 AS Item FROM playergame
) AS Items
INNER JOIN
(
SELECT Item0 AS ItemW FROM playergame
UNION ALL
SELECT Item1 AS ItemW FROM playergame WHERE Win = 1
UNION ALL
SELECT Item2 AS ItemW FROM playergame WHERE Win = 1
UNION ALL
SELECT Item3 AS ItemW FROM playergame WHERE Win = 1
UNION ALL
SELECT Item4 AS ItemW FROM playergame WHERE Win = 1
UNION ALL
SELECT Item5 AS ItemW FROM playergame WHERE Win = 1
UNION ALL
SELECT Item6 AS ItemW FROM playergame WHERE Win = 1
)AS ItemW
ON Items.Item = ItemW.ItemW
GROUP BY
Items.Item
从这个 sql 我得到了这个结果 second result of sql
我想你想要:
SELECT i.Item, COUNT(*) as repeats,
SUM(CASE WHEN Win = 1 THEN 1 ELSE 0 END) as Wins
FROM (SELECT Item0 AS Item, Win FROM playergame
UNION ALL
SELECT Item1 AS Item, Win FROM playergame
UNION ALL
SELECT Item2 AS Item, Win FROM playergame
UNION ALL
SELECT Item3 AS Item, Win FROM playergame
UNION ALL
SELECT Item4 AS Item, Win FROM playergame
UNION ALL
SELECT Item5 AS Item, Win FROM playergame
UNION ALL
SELECT Item6 AS Item, Win FROM playergame
) i
GROUP BY i.Item
ORDER BY `repeats`;
也就是说,您应该修复数据结构。您应该有另一个名为 playergameItems
的 table,每个 "playergame" 一行,每个 item
一行。