У меня есть таблица следующей структуры:
| id | bool | amt |
-------------------
| 1 | 0 | 4 |
| 1 | 1 | 3 |
| 1 | 1 | 5 |
| 2 | 0 | 8 |
| 2 | 1 | 4 |
| 2 | 0 | 4 |
Я хочу получить сумму amt
, но только при соотношении bool = 1
/ bool = 0
на id
больше 0,6.
Я успешно сделал это следующим образом:
SELECT SUM(amt) as total_amt,
FROM table
WHERE id IN (
SELECT id
FROM table
GROUP BY id
HAVING CAST(SUM(bool) AS DOUBLE) / CAST(COUNT(bool) AS DOUBLE) > 0.6
)
Однако моя проблема в том, что это игрушечная симуляция моих реальных таблиц и данных, и на самом деле это это очень большой объем данных. Когда я запускаю этот запрос для всех своих данных, я получаю сообщения об ошибках, говорящих о том, что предел памяти кластера достигнут, или что время выполнения достигло предела. Если я удаляю оператор WHERE
, который находит id
s, удовлетворяющие отношению, то он выполняется без ошибок.
Прежде чем прибегнуть к увеличению этих пределов, есть ли способ, которым я могу добиться этого более эффективно, или с точки зрения памяти, времени выполнения или обоих?