mysql как сгруппировать по любому из полей

MySQL базы данных sql группировка

Есть таблица заказов, с полями id заказа, id клиента, email, телефон. Нужно вычленить уникальных клиентов при том что уже зарегистрированный клиент мог не авторизоваться при заказе, а так же мог указать в разных заказах - разные телефон и email.
Т.е. получается надо сгруппировать запрос не по уникальным значениям полей, а наоборот, при любом совпадении этих полей.

Примечание:
imit2010, твой запрос не подходит, в нем не учитывается, что в одном заказе могут встречаться и id и email и телефон, при том что некоторые из них могут быть уникальными в этом заказе, а некоторые встречаться в других заказах

Примечание:
hedint, по сути уникального значение -id, но есть пользователи не зарегистрированные, а следовательно не имеющие id. И для них уникального значения нет, есть совокупность email и телефонов для зарегистрированного пользователя. В принципе можно разбить задачу на две: вычленить зарегистрированных пользователей с id, это действительно решается group by id, и остается набор email и телефонов которые просто сгруппировать уже не получится, так надо сгруппировать все записи с одинаковыми телефонами и email.

Примечание:
Вот такой запрос вернул более менее то что нужно, однако если нужно будет еще разделить по датам, то он уже не годится:
select group_concat(DISTINCT id),group_concat(DISTINCT clients_id),GROUP_CONCAT(DISTINCT email),GROUP_CONCAT(DISTINCT phone),phone as telephone,count(*) from orders group by (case when clients_id IS NOT NULL then clients_id when email IS NOT NULL AND email!='' then email else telephone end);
p.s. Отдельное спасибо imit2010, еще не тестил, но по-моему твой вариант тоже должен дать то, что нужно.
Ответы:
Тупо в лоб
select * from (
select order.*, client_id as f from order group by client_id
union
select order.*, email as f from order group by email
union
select order.*, phone as f from order group by phone
) group by client_id, email, phone
писал на скорую руку, но идея должна быть понятна. выбрать уникальных по id, затем уникальные мейлы, телефоны, объединить и из объединения выбрать самых уникальных.
про оптимальность этого запроса умолчу..
не совсем понятна ваша задача.
Что понимается под "уникальностью"? какие у вас критерии уникальности?
Убрать совпадения можно простым GROUP BY `column`.
Да, с пониманием уникальности в этой задаче можно моск сломать.
Как такой вариант? сJOINить таблицу саму на себя три раза (пусть это будет t1,t2,t3), по ид, мейлу и телефону. Выбрать из этого мегаджойна те записи, где совпадают либо идишники t1=t2 либо t2=t3 либо мейлы t1=t2 либо t2=t3 либо телефоны t1=t2 либо t2=t3, но которые не являются произведением самой записи на саму себя три раза (т.е. id заказа не должен быть одним в t1 t2 и t3). Оставшиеся, за исключением тех айди, которые уже отфильтрованы, получатся "уникальными". Конечно это не распространяется на случай, когда у Васи один телефон с Петей, а у Пети тот же емейл, что у Федора и при этом получается что Вася и Федор - оба один уникальный клиент.


12 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.