【问题标题】:Mysql 8 AggregationMysql 8 聚合
【发布时间】:2021-09-10 18:44:01
【问题描述】:

我有一个具有这种特定结构的表

在这里,我们有不同候选人执行的薮操作 (performer)。 对于每个性能,它可以是主要的或次要的(primary 列)。

每个动作可以主要只执行一次,但可以是次要的服务时间

我正在寻找的,是我为每个动作获得的结果、主要执行者的姓名和次要执行者的姓名。

这是我正在寻找的结果:

这可以仅通过 SQL 脚本来完成吗?或者我必须开发一个后端脚本(例如使用 PHP)来格式化数据?

【问题讨论】:

    标签: mysql sql aggregation mysql-8.0


    【解决方案1】:

    当然,这很容易做到,像这样:

    SELECT  action,
            GROUP_CONCAT(
                CASE
                    WHEN T.primary = 1
                    THEN performer
                END
            )                   AS  primary,
            GROUP_CONCAT(
                CASE
                    WHEN T.primary = 0
                    THEN performer
                END
            )                   AS  secondary
    FROM    my_table
    GROUP BY action
    

    【讨论】:

    • 每个动作只有 1 行的 primary = 1,因此不需要 GROUP_CONCAT() 。一个简单的 MAX(CASE...) 就可以了。
    • 主要是否只能出现一次的问题并不清楚,但即便如此,我建议在使用字符串时使用 GROUP_CONCAT
    • @forpas Yair Maron 给出的答案完成了工作。您对使用 MAX(CASE..) 有其他建议吗?谢谢大家
    • @beta-developper 它只是一种简化,而不是另一种解决方案:MAX(CASE WHEN T.primary = 1 THEN performer END) 而不是 GROUP_CONCAT()
    猜你喜欢
    • 2021-02-22
    • 2014-07-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多