Рассчитать процент от общего количества по группам в Access 2016 - PullRequest
0 голосов
/ 18 июня 2020

У меня есть запрос, который возвращает результаты для нескольких EVENT_ID. Я хотел бы рассчитать процент PPWAP от общего PPWAP каждого EVENT_ID для каждого SELECTION-ID.

Это пример результатов для одного EVENT_ID:

enter image description here

Кто-нибудь может подсказать, как это можно сделать?

Спасибо

Ответы [ 2 ]

1 голос
/ 18 июня 2020

Я бы предпочел использовать для этого GROUP BY и JOIN. Ваш вопрос немного непонятен. Если вам нужна пропорция по событию:

select e.*, PPWAP / total_PPWAP as ratio
from tblEvent as e inner join
     (select event_id, sum(PPWAP) as total_PPWAP
      from tblEvent 
      group by event_id
     ) as ee
     on ee.event_id = e.event_id;

Если вы действительно хотите, чтобы это было в каком-то невидимом столбце, таком как selection_id, вы должны использовать это для GROUP BY и JOIN.

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

1 голос
/ 18 июня 2020

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

SELECT 
    E.EVENT_ID, 
    E.EVENT_NAME, 
    E.EVENT_DATE, 
    E.SELECTION_NAME, 
    E.PPWAP,
    (SELECT SUM(E1.PPWAP) FROM tblEvent AS E1 WHERE E1.EVENT_ID=E.EVENT_ID AND E1.EVENT_DATE=E.EVENT_DATE) AS TOTAL_PPWAP,
    E.PPWAP/TOTAL_PPWAP*100 AS PCT_PPWAP
FROM tblEvent AS E

Это дает следующий результат: enter image description here Возможно, вам потребуется изменить поля, используемые в части WHERE подзапроса, в зависимости от того, как именно вы определяете сумму, которая будет рассчитана.

С уважением,

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