Будет ли этот запрос работать?
SELECT a.date,
a.gran1,
a.gran2,
a.gran3,
b.value1/gran_count AS value1,
b.value2/gran_count AS value2
FROM table_a a
INNER JOIN table_b b
ON (a.date = b.date
AND a.gran1 = b.gran1
AND a.gran2 = b.gran2)
INNER JOIN (
SELECT date, gran1, gran2, count(*) AS gran_count
FROM table_a
GROUP BY date, gran1, gran2
) sub ON (a.date = sub.date
AND a.gran1 = sub.gran1
AND a.gran2 = sub.gran2);
У меня нет доступа к SQL прямо сейчас, поэтому я не могу проверить данные (или даже если я что-то пропустил в синтаксисе), но я пытаюсь найти СЧЕТ каждой комбинации даты / gran1 / gran2 в подзапросе, а затем использовать его в делении основного запроса.
И table_b, и подзапрос (который я назвал "sub") объединяются в table_a.
Возможно, есть более эффективный способ выполнить этот запрос, используя два объединения вместо трех, но сейчас ничего не приходит в голову.