Я пытаюсь извлечь некоторые данные, сгруппированные на рынках, где мы работаем Структура таблицы выглядит следующим образом:запрессовки на нескольких столах вызывает неправильные результаты
bks:
opportunity_id
bks_opps:
opportunity_id | trip_start | state
bts:
boat_id | package_id
pckgs:
package_id | boat_id
addresses:
addressable_id | district_id
districts:
district_id
То, что я хотел сделать, это подсчитать количество выиграл, проиграл, и общий процент выиграл для каждого района.
SELECT d.name AS "District",
SUM(CASE WHEN bo.state IN ('won') THEN 1 ELSE 0 END) AS "Won",
SUM(CASE WHEN bo.state IN ('lost') THEN 1 ELSE 0 END) AS "Lost",
Count(bo.state) AS "Total",
Round(100 * SUM(CASE WHEN bo.state IN ('won') THEN 1 ELSE 0 END)/Count(bo.state)) AS "% Won"
FROM bks b
INNER JOIN bks_opps bo ON bo.id = b.opportunity_id
INNER JOIN pckgs p ON p.id = b.package_id
INNER JOIN bts bt ON bt.id = p.boat_id
INNER JOIN addresses a ON a.addressable_type = 'Boat' AND a.addressable_id = bt.id
INNER JOIN districts d ON d.id = a.district_id
WHERE bo.trip_start BETWEEN '2016-05-12' AND '2016-06-12'
GROUP BY d.name;
Это возвращает неверные данные (значения намного выше, чем ожидалось). Однако, когда я избавляюсь от всех объединений и прекращаю группировку по округу, цифры правильны (подсчет количества возможностей). Кто-нибудь может определить, что я делаю неправильно? Самый близкий вопрос здесь - this.
Пример данных:
District | won | lost | total
----+---------+---------+------
1 | 42 | 212 | 254
Ожидаемые данные:
District | won | lost | total |
----+---------+---------+--
1 | 22 | 155 | 177
начать с 'select separate' –
Все еще не работает .... – DBE7
Вы должны предоставить пример данных, чтобы иметь возможность воспроизвести вашу проблему. –