Группировка процентного расчета в postgres / redshift - PullRequest
0 голосов
/ 18 апреля 2020

Я продолжаю сталкиваться с одной и той же проблемой снова и снова, надеясь, что кто-то может помочь ...

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

WITH totaldonkeys AS (
    SELECT donkeybreed,
           COUNT(*) AS total
    FROM donkeytable1
    GROUP BY donkeybreed
)
,
sickdonkeys AS (
    SELECT donkeybreed,
           COUNT(*) AS totalsick
    FROM donkeytable1
    JOIN donkeyhealth on donkeytable1.donkeyid = donkeyhealth.donkeyid
    WHERE donkeyhealth.sick IS TRUE
    GROUP BY donkeybreed
)
,

Моя цель - получить таблицу, в которой в основном указывается процент больных ослов для каждой породы, но я всегда в конечном итоге, как ад, я борюсь с проблемой невозможности группировки без использования агрегатной функции, которую я не могу сделать здесь:

SELECT (CAST(sickdonkeys.totalsick AS float) / totaldonkeys.total) * 100 AS percentsick,
                totaldonkeys.donkeybreed
    FROM totaldonkeys, sickdonkeys
    GROUP BY totaldonkeys.donkeybreed

Когда я запускаю это, я получаю 28 результатов для каждой породы ослов. один правильный, я верю, но, очевидно, сотни бесполезных данных все по-новому, потому что вы не можете сделать этот последний запрос без агрегатной функции, я думаю, что пропустить что-то значительное.

1 Ответ

0 голосов
/ 18 апреля 2020

Вы можете легко сосчитать долю заболевших в таблице donkeyhealth

SELECT d.donkeybreed,
       AVG( (dh.sick)::int ) AS proportion_sick
FROM donkeytable1 d JOIN
     donkeyhealth  dh
     ON d.donkeyid = dh.donkeyid
GROUP BY d.donkeybreed
...