Ho una tabella postgres che assomiglia a questo:SQL somma del valore della colonna, unico per utente al giorno
id | user_id | state | created_at
Lo stato può essere uno dei seguenti:
new, paying, paid, completing, complete, payment_failed, completion_failed
ho bisogno di un dichiarazione che restituisce un rapporto con il seguente:
- somma di tutti gli stati pagati per data
- somma di tutti gli stati completati per data
- somma di tutti i nuovi, pagando, completando stati per data con una sola per utente al giorno da contare
- somma di tutti payment_failed, completion_failed per data con un solo per utente al giorno essere contati
Finora ho questo:
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)
Una somma del in corso e stati falliti è abbastanza facile con l'aggiunta di questo al di selezione:
Ma ho problemi a capire come fare un solo con user_id al giorno in_progress e gli stati non riusciti da conteggiare.
Il motivo per cui ho bisogno di questo è di manipolare il tasso di errore nelle nostre statistiche, in quanto molti utenti che attivano un errore o un ordine incompleto continuano a innescare più che gonfia il nostro tasso di fallimento.
Grazie in anticipo.
tua versione di PostgreSQL? –
@IgorRomanchenko 9.1.6 –