#mysql #sql
#mysql #sql
Вопрос:
У меня есть таблица заказов, где каждый продукт, который заказывает клиент, находится в отдельной строке.
Продукты зависят от пола, и я хотел бы иметь возможность сегментировать своих клиентов по признаку пола. Тем не менее, некоторые клиенты заказывают как мужские, так и женские товары, и я хотел бы иметь возможность обнаружить и это.
Это простое представление структуры таблицы:
---------- ---------------- ----------------
| Order ID | Customer Email | Product Gender |
---------- ---------------- ----------------
| 1 | john@ | Male |
| 2 | john@ | Unisex |
| 3 | matt@ | Male |
| 4 | matt@ | Female |
| 5 | abby@ | Female |
---------- ---------------- ----------------
Результат, который я ищу, будет:
john@ — Male (мужской мужской вернутся к мужскому)
matt @ — Унисекс (M F / Унисекс вернется к Унисекс)
эбби @ — женщина
Так что я предполагаю, что обращение проверяет пол в группе электронной почты клиента, я просто не уверен, как его полностью написать.
Ответ №1:
Сделайте GROUP BY
. Если существует более 1 отдельного пола, отличного от унисекс, верните Unisex . В противном случае верните MIN(пол), который будет единственным (или в сочетании с unisex.)
select Customer_Email,
case when count(distinct case when Product_Gender <> 'Unisex'
then Product_Gender
end) > 1 then 'unisex'
else MIN(Product_Gender)
end
from tablename
group by Customer_Email
Комментарии:
1. Однако он не сможет классифицировать кого-то, кто покупает продукт, специфичный для пола продукт Унисекс, как этот пол. Т.е. Мужчина Унисекс должен быть мужчиной, а не унисекс.