Cercherò di descrivere la situazione reale. Nella nostra azienda abbiamo un sistema di prenotazione con un tavolo, chiamiamolo clienti, in cui e-mail e contatti telefonici vengono salvati con ogni ordine in arrivo - questa è la parte di un sistema che non posso cambiare. Sto affrontando il problema su come ottenere il conteggio dei unici clienti. Con il unico cliente intendo un gruppo di persone che ha la stessa e-mail o lo stesso numero di telefono.query SQL come GROUP BY con condizione OR
Esempio 1: Dalla vita reale puoi immaginare Tom e Sandra che sono sposati. Tom, che ha ordinato 4 prodotti, ha inserito nel nostro sistema di prenotazione 3 diversi indirizzi e-mail e 2 numeri di telefono diversi quando uno di loro condivide con Sandra (come homephone), quindi posso presumere che siano collegati in qualche modo. Sandra tranne questo numero di telefono condiviso ha riempito anche il suo numero privato e per entrambi gli ordini ha utilizzato un solo indirizzo e-mail. Per me questo significa contare tutte delle righe seguenti come uno cliente unico. In effetti, questo cliente unico può crescere in tutta la famiglia.
ID E-mail Phone Comment
---- ------------------- -------------- ------------------------------
0 [email protected] +44 111 111 First row
1 [email protected] +44 111 111 Same phone, different e-mail
2 [email protected] +44 111 111 Same phone, different e-mail
3 [email protected] +44 222 222 Same e-mail, different phone
4 [email protected] +44 222 222 Same phone, different e-mail
5 [email protected] +44 333 333 Same e-mail, different phone
Come ypercube detto probabilmente avrò bisogno di una ricorsione per contare tutti questi clienti unici.
Esempio 2: Ecco l'esempio di ciò che voglio fare.
È possibile ottenere il conteggio di clienti unici senza ricorrere alla ricorsione, ad esempio utilizzando il cursore o qualcosa del genere o è necessaria la ricorsione?
ID E-mail Phone Comment
---- ------------------- -------------- ------------------------------
0 [email protected] +44 111 111 ─┐
1 [email protected] +44 111 111 ├─ 1. unique customer
2 [email protected] +44 222 222 ─┘
---- ------------------- -------------- ------------------------------
3 [email protected] +44 333 333 ─┐
4 [email protected] +44 444 444 ├─ 2. unique customer
5 [email protected] +44 444 444 ─┘
---- ------------------- -------------- ------------------------------
6 [email protected] +44 555 555 ─── 3. unique customer
---- ------------------- -------------- ------------------------------
7 [email protected] +44 666 666 ─┐
8 [email protected] +44 777 777 ├─ 4. unique customer
9 [email protected] +44 888 888 ─┘
---- ------------------- -------------- ------------------------------
10 [email protected] +44 999 999 ─┐
11 [email protected] +44 999 999 ├─ 5. unique customer
12 [email protected] +44 999 999 ─┘
---- ------------------- -------------- ------------------------------
----------------------------------------------------------------------
Result ∑ = 5 unique customers
----------------------------------------------------------------------
ho provato una query con GROUP BY, ma non so come gruppo il risultato per primo o seconda colonna. Sto cercando diciamo qualcosa come
SELECT COUNT(*) FROM Customers
GROUP BY Email OR Phone
Grazie ancora per eventuali suggerimenti
P.S. Apprezzo molto le risposte a questa domanda prima della riformulazione completa. Ora le risposte qui non possono corrispondere a l'aggiornamento quindi per favore non downvote qui se avete intenzione di farlo (ad eccezione della domanda ovviamente :). Ho completamente riscritto questo post.
Grazie e scusa per il mio inizio sbagliato.
Effettua una ricerca per '' sopra' e PARTITION BY' o 'finestra functions' –
Perché George ha un conteggio di 3 e perché la sua Id va dal 5 al 7 –
Forse non è chiaro dalla mia domanda, ma sto cercando solo un numero così netto di clienti unici. Aggiornerò la mia domanda, mi dispiace per i partecipanti e grazie per lo sforzo. –