Mysql 8 聚合
Posted
技术标签:
【中文标题】Mysql 8 聚合【英文标题】:Mysql 8 Aggregation 【发布时间】:2021-09-10 18:44:01 【问题描述】:我有一个具有这种特定结构的表
在这里,我们有不同候选人执行的薮操作 (performer
)。
对于每个性能,它可以是主要的或次要的(primary
列)。
每个动作可以主要只执行一次,但可以是次要的服务时间
我正在寻找的,是我为每个动作获得的结果、主要执行者的姓名和次要执行者的姓名。
这是我正在寻找的结果:
这可以仅通过 SQL 脚本来完成吗?或者我必须开发一个后端脚本(例如使用 php)来格式化数据?
【问题讨论】:
【参考方案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()以上是关于Mysql 8 聚合的主要内容,如果未能解决你的问题,请参考以下文章