Случай, основанный на свойствах группы MySQL

#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. Однако он не сможет классифицировать кого-то, кто покупает продукт, специфичный для пола продукт Унисекс, как этот пол. Т.е. Мужчина Унисекс должен быть мужчиной, а не унисекс.