Преобразование количества в таблицах результатов запроса в процентах от общего - PullRequest
0 голосов
/ 05 апреля 2020

У меня есть таблица, и я хочу рассчитать процент от общего количества по store_id, который представляет каждый промежуточный итог (category_id, store_id). Мой код ниже:

WITH
    example_table (name, store_id)
AS 
    (
        select name, store_id
        from category
        join film_category using (category_id)
        join film using (film_id)
        join inventory using (film_id)
        join rental using (inventory_id)
    )
SELECT name, store_id, cast(count(*) as numeric)/(SELECT count(*) FROM example_table)
FROM example_table
GROUP BY name, store_id
ORDER BY name, store_id

Этот код на самом деле работает, так как он не выдает ошибку, только они не результаты, которые я ищу. Здесь каждый из промежуточных итогов делится на сумму по обоим магазинам и всем 16 именам. Вместо этого я хочу, чтобы промежуточные итоги были поделены на их итоговые суммы в магазинах или на их итоговые значения. Мне интересно, как вообще выполнить вычисления для этих промежуточных итогов.

Заранее спасибо,

1 Ответ

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

Я считаю, что вам нужно изучить возможности использования агрегатных функций в сочетании с OVER(PARTITION BY ...) например,

SELECT DISTINCT
   name, store_id, store_id_count, name_count
FROM (
        select name, store_id
             , count(*) over(partition by store_id) as store_id_count
             , count(*) over(partition by name) as name_count
        from category
        join film_category using (category_id)
        join film using (film_id)
        join inventory using (film_id)
        join rental using (inventory_id)
    ) AS example_table

. При использовании агрегатной функции с предложением over вы получаете желаемое количество для каждой строки результата. И кажется, что в этом случае вам это нужно. Обратите внимание, что select distinct был использован просто для уменьшения конечного числа возвращаемых строк, вам все равно может понадобиться использовать group by, но я не уверен, что вы это сделаете.

Как только вы получите необходимые значения в производная таблица (псевдонимы example_table), тогда в общем предложении выбора должно быть просто арифметическое c.

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