私がしたいのは、テーブルの統計を作成することです。このために私は使用していますgenerate_series();
これが私がやっていることです:
SELECT x.month, amount
FROM (SELECT generate_series(
min(date_trunc('month', date)),
max(date_trunc('month', date)),
'1 month'
) AS month
FROM table
WHERE user_id = 55 AND ...
) x
LEFT JOIN (
SELECT SUM(amount) AS amount, date_trunc('month', date) AS month
FROM table
WHERE user_id = 55 AND ...
GROUP BY month
) q ON q.month = x.month
ORDER BY month
これはうまく機能しますが、特定のユーザーの金額を取得するなどのフィルターを適用する場合は、フィルターを 2 回適用する必要があります。2 回のフィルタリングを回避する方法、またはこれが正しい方法かどうかわからないため、より効率的な方法でこれを書き直す方法はありますか?