如何从连接列按年份分组

Posted

技术标签:

【中文标题】如何从连接列按年份分组【英文标题】:How to group by year from a concatenated column 【发布时间】:2021-12-28 17:16:58 【问题描述】:

有一个这样的 mysql 表,其中 id 是具有 Ymd 格式(插入行的那一刻)的日期与增量 id 的串联。

|     id      |   weight  |
| 20200128001 |    100    |
| 20200601002 |    250    |
| 20201208003 |    300    |
| 20210128001 |    150    |
| 20210601002 |    200    |
| 20211208003 |    350    |

按我正在制作的一年计算“重量”的总和:

SELECT sum(weight) as weight FROM `table` WHERE id LIKE '2020%';

在这种情况下导致:

650

我怎样才能使它按年份生成权重表,而不是按每个可能的年份进行查询,导致这种情况为:

| date |  weight  |
| 2020 |    650   |
| 2021 |    700   |

【问题讨论】:

【参考方案1】:

使用 MySQL 中的字符串处理函数之一,例如 left()

SELECT LEFT(id,4) as Year, SUM(weight) as Weight
FROM `table`
GROUP BY LEFT(id,4)
ORDER BY LEFT(id,4)

如果你想将结果限制在这 2 年

SELECT LEFT(id,4) as Year, SUM(weight) as Weight
FROM `table`
WHERE LEFT(id,4) IN (2021, 2022)
GROUP BY LEFT(id,4)
ORDER BY LEFT(id,4)

【讨论】:

以上是关于如何从连接列按年份分组的主要内容,如果未能解决你的问题,请参考以下文章

pandas/matplotlib 中一列按另一列分组的箱形图

并排条形图与列按比例分组(相对频率条形图)

For loop python - 按年份和分组操作

如何按年份进行分组?

Jekyll/Liquid 模板:如何按年份对博客文章进行分组?

Graphql - 根据出版年份分组剧集