【问题标题】:Is there some way to join two of Union All columns有什么方法可以加入两个 Union All 列
【发布时间】:2018-12-27 20:42:41
【问题描述】:

我正在制作英雄联盟 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`

这段代码给了我类似的东西:

result of sql

我想在右侧添加另一个重复的表,但这次添加到代码 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

【问题讨论】:

    标签: sql count union-all


    【解决方案1】:

    我想你想要:

    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 的表,每个“玩家游戏”一行,每个 item 一行。

    【讨论】:

    • 非常感谢你让我坐了几个小时。我会接受你的建议并制作新桌子。谢谢你教我一些新的东西,也谢谢你。
    猜你喜欢
    • 1970-01-01
    • 2021-07-13
    • 2013-09-12
    • 1970-01-01
    • 1970-01-01
    • 2012-08-16
    • 2020-03-03
    • 2022-12-04
    • 1970-01-01
    相关资源
    最近更新 更多