用戶唯一我有一個Postgres的表看起來像這樣:SQL總和,每
id | user_id | state | created_at
狀態可以是下列任何一種:
new, paying, paid, completing, complete, payment_failed, completion_failed
我需要一個返回與下面的報告語句:按日期
- 款項支付所有國家的
- 按日期之所有已完成的狀態
- 和所有新的,支付,完成日期的狀態只有一個每用戶每天要算
- 總和的所有payment_failed,按日期completion_failed與每個用戶每天只有一個要算
到目前爲止,我有這樣的:
SELECT
DATE(created_at) AS date,
SUM(CASE WHEN state = 'complete' THEN 1 ELSE 0 END) AS complete,
SUM(CASE WHEN state = 'paid' THEN 1 ELSE 0 END) AS paid
FROM orders
WHERE created_at BETWEEN ? AND ?
GROUP BY DATE(created_at)
的進展和失敗國家的總和爲加入這選擇很容易:
SUM(CASE WHEN state IN('new','paying','completing') THEN 1 ELSE 0 END) AS in_progress,
SUM(CASE WHEN state IN('payment_failed','completion_failed') THEN 1 ELSE 0 END) AS failed
但我無法弄清楚如何每天只有一個user_id in_progress和失敗的狀態進行計數。
我需要這個的原因是在我們的統計數據中操縱失敗率,因爲許多觸發失敗或不完整訂單的用戶繼續觸發更多事件,從而導致我們的失敗率上升。
感謝您提前。
你的PostgreSQL的版本? –
@IgorRomanchenko 9.1.6 –