【问题标题】:Case based on properties of group by MySQL基于 MySQL 分组属性的案例
【发布时间】:2020-11-26 16:09:25
【问题描述】:

我有一张订单表,其中客户订购的每个产品都在不同的行上。

产品具有性别差异,我希望能够按性别对客户进行细分。但是,有些客户同时订购了男性和女性产品,我也希望能够检测到这一点。

这是表结构的简单表示:

+----------+----------------+----------------+
| Order ID | Customer Email | Product Gender |
+----------+----------------+----------------+
|        1 | john@          | Male           |
|        2 | john@          | Unisex         |
|        3 | matt@          | Male           |
|        4 | matt@          | Female         |
|        5 | abby@          | Female         |
+----------+----------------+----------------+

我正在寻找的结果是:

john@ - 男性(男性+中性将恢复为男性)

matt@ - 中性(M+F / 中性将恢复为中性)

abby@ - 女

所以我猜是一个在客户电子邮件组中检查性别的案例,我只是不知道如何完整地编写它。

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    做一个GROUP BY。如果有超过 1 个不同的非中性性别,则返回中性。否则返回MIN(gender),这将是唯一的一个(或与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
    

    【讨论】:

    • 它无法将购买特定性别产品 + 中性产品的人归类为该性别。 IE。 Male + Unisex 应该是 Male,而不是 Unisex。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多