Есть ли способ объединить две колонки Union All? - PullRequest
0 голосов
/ 27 декабря 2018

я делаю League of Legends Api. У меня есть предметы в базе данных, подобные этой база данных У меня есть такой код 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`

Thisкод дает мне что-то вроде этого:

результат sql

Я хочу добавить на правой стороне еще одну таблицу с повторениями, но на этот раз добавить к коду ГДЕ, поэтому я сделалэтот код:

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 я получил этот результат второй результат sql

1 Ответ

0 голосов
/ 27 декабря 2018

Я думаю, вы хотите:

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 с одной строкой на "playergame" и одной строкой на item.

...