неясные ответы mysql не складываются в один и тот же номер - PullRequest
0 голосов
/ 11 ноября 2018

У меня есть звонок, чтобы узнать количество игроков в наших магазинах, общая сумма меньше, чем сумма отдельных сумм. я в недоумении, почему это происходит.

SELECT (SELECT
         COUNT(DISTINCT (playerid))
       FROM playerhistory
       WHERE MONTH(from_unixtime(checkouttime)) = 11
       AND YEAR(from_unixtime(checkouttime)) = 2018
       AND storeid > 100
       AND howmuchplayed > 0)
       AS total,
       (SELECT
         COUNT(DISTINCT (playerid))
       FROM playerhistory
       WHERE MONTH(from_unixtime(checkouttime)) = 11
       AND YEAR(from_unixtime(checkouttime)) = 2018
       AND storeid = 12786
       AND howmuchplayed > 0)
       AS ra,
       (SELECT
         COUNT(DISTINCT (playerid))
       FROM playerhistory
       WHERE MONTH(from_unixtime(checkouttime)) = 11
       AND YEAR(from_unixtime(checkouttime)) = 2018
       AND storeid = 12801
       AND howmuchplayed > 0)
       AS mp,
       (SELECT
         COUNT(DISTINCT (playerid))
       FROM playerhistory
       WHERE MONTH(from_unixtime(checkouttime)) = 11
       AND YEAR(from_unixtime(checkouttime)) = 2018
       AND storeid = 12830
       AND howmuchplayed > 0)
       AS cy,
       (SELECT
         COUNT(DISTINCT (playerid))
       FROM playerhistory
       WHERE MONTH(from_unixtime(checkouttime)) = 11
       AND YEAR(from_unixtime(checkouttime)) = 2018
       AND storeid = 13389
       AND howmuchplayed > 0)
       AS ne,
       (SELECT
         COUNT(DISTINCT (playerid))
       FROM playerhistory
       WHERE MONTH(from_unixtime(checkouttime)) = 11
       AND YEAR(from_unixtime(checkouttime)) = 2018
       AND storeid = 13600
       AND howmuchplayed > 0)
       AS lm,
       (SELECT
         COUNT(DISTINCT (playerid))
       FROM playerhistory
       WHERE MONTH(from_unixtime(checkouttime)) = 11
       AND YEAR(from_unixtime(checkouttime)) = 2018
       AND storeid = 13694
       AND howmuchplayed > 0)
       AS ch

, который дает результаты:

total | ra | mp | cy | ne | lm | ch 303 | 34 | 74 | 27 | 43 | 75 | 53

Как вы можете видеть, общее количество составляет 303, но когда вы складываете ra, mp, cy, ne, lm и ch, получается 306

других таблиц в таблице нет:

select distinct(storeid) from playerhistory where storeid > 100

Результат:

storeid 12786 12801 12830 13389 13600 13694

есть ли в моем запросе ошибка? почему не складывается?

спасибо за любую помощь в этом.

1 Ответ

0 голосов
/ 11 ноября 2018

Некоторые из ваших игроков играют в более чем 1 магазине. Может быть один игрок, играющий в 4 магазинах, или другая комбинация, например, 3 игрока, играющие в 2 магазинах каждый.

Ваш запрос может работать только в том случае, если каждому игроку может быть присвоен только один магазин. Если это не так, то результат будет противоречивым в большинстве случаев.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...