Попробую описать реальную ситуацию. В нашей компании есть система бронирования со столиком, назовем ее Клиенты , где электронная почта и телефонные контакты сохраняются с каждым входящим заказом - это часть системы, которую я не могу изменить. Я столкнулся с проблемой, как подсчитать уникальных клиентов. Под уникальным клиентом я имею в виду группу людей, у которых один и тот же адрес электронной почты или один и тот же номер телефона.
Пример 1 : Из реальной жизни вы можете представить, что Том и Сандра женаты. . Том, который заказал 4 продукта, заполнил нашу систему бронирования 3 разными адресами электронной почты и 2 разными номерами телефонов, когда один из них делится с Сандрой (в качестве домашнего телефона), поэтому я могу предположить, что они каким-то образом связаны. Сандра, за исключением этого общего номера телефона, заполнила и ее личный, и для обоих заказов она использовала только один адрес электронной почты. Для меня это означает подсчет всех следующих строк как одного уникального клиента . Так что на самом деле этот уникальный заказчик может вырасти в целое семейство.
ID E-mail Phone Comment
---- ------------------- -------------- ------------------------------
0 tom@email.com +44 111 111 First row
1 tommy@email.com +44 111 111 Same phone, different e-mail
2 thomas@email.com +44 111 111 Same phone, different e-mail
3 thomas@email.com +44 222 222 Same e-mail, different phone
4 sandra@email.com +44 222 222 Same phone, different e-mail
5 sandra@email.com +44 333 333 Same e-mail, different phone
Как ypercube сказал, мне, вероятно, понадобится рекурсия для подсчета всех этих уникальных клиентов ].
Пример 2 : Вот пример того, что я хочу сделать.
Можно ли получить количество уникальных клиентов без использования рекурсии, например, с помощью курсора или чего-то еще или нужна ли рекурсия?
ID E-mail Phone Comment
---- ------------------- -------------- ------------------------------
0 linsey@email.com +44 111 111 ─┐
1 louise@email.com +44 111 111 ├─ 1. unique customer
2 louise@email.com +44 222 222 ─┘
---- ------------------- -------------- ------------------------------
3 steven@email.com +44 333 333 ─┐
4 steven@email.com +44 444 444 ├─ 2. unique customer
5 sandra@email.com +44 444 444 ─┘
---- ------------------- -------------- ------------------------------
6 george@email.com +44 555 555 ─── 3. unique customer
---- ------------------- -------------- ------------------------------
7 xavier@email.com +44 666 666 ─┐
8 xavier@email.com +44 777 777 ├─ 4. unique customer
9 xavier@email.com +44 888 888 ─┘
---- ------------------- -------------- ------------------------------
10 robert@email.com +44 999 999 ─┐
11 miriam@email.com +44 999 999 ├─ 5. unique customer
12 sherry@email.com +44 999 999 ─┘
---- ------------------- -------------- ------------------------------
----------------------------------------------------------------------
Result ∑ = 5 unique customers
----------------------------------------------------------------------
Я пробовал запрос с GROUP BY, но не знаю, как сгруппировать результат по первому или второму столбцу.Я ищу что-нибудь вроде
SELECT COUNT(*) FROM Customers
GROUP BY Email OR Phone
Еще раз спасибо за любые предложения
P.S.
Я очень ценю ответы на этот вопрос до полного перефразирования. Теперь ответы здесь могут не соответствовать обновлению, поэтому, пожалуйста, не голосуйте против, если вы собираетесь это сделать (кроме вопроса, конечно:) . Я полностью переписал этот пост.
Спасибо и извините за неправильный старт.