按格式化字符串分组的 SQL 联合

Posted

技术标签:

【中文标题】按格式化字符串分组的 SQL 联合【英文标题】:SQL Union grouped by formatted strings 【发布时间】:2018-06-19 04:36:16 【问题描述】:

我试图总结 2 个不同表中的 2 列,按格式化字符串分组和排序。

架构要点是这样的:

Table A:
* Created At
* Amount Charged

Table B:
* Created At
* Cash Amount

请注意,它们共享一个名为“created at”的列名,但对于我要总结的内容有不同的列名。

我想要一个结果,说明 1 月份,表 A 收费金额 + 表 B 现金金额之和为 x,2 月份,依此类推。

我是这样格式化日期的:

str_to_date(concat(date_format(created_at, '%Y-%m'), '-01')

【问题讨论】:

请在您的问题中包含示例数据、表格定义和预期输出 【参考方案1】:

你可以使用UNION ALL:

SELECT str_to_date(concat(date_format(created_at, '%Y-%m'), '-01'), SUM(sub.c)
FROM (SELECT created_at, Amount AS c
      FROM tabA
      UNION ALL 
      SELECT created_at, Cash
      FROM tabB) sub
GROUP BY str_to_date(concat(date_format(created_at, '%Y-%m'), '-01');

我会替换str_to_date(concat(date_format(created_at, '%Y-%m'), '-01') EXTRACT(YEAR_MONTH FROM created_at)

【讨论】:

以上是关于按格式化字符串分组的 SQL 联合的主要内容,如果未能解决你的问题,请参考以下文章

分组函数与分组查询回顾

分组函数与分组查询回顾

Oracle SQL 查询计数组按时间戳子串

请问DB2里面的SQL查询语句按周分组是怎么写的

SQL按LIKE(带通配符)进行分组,如何实现正确的求和

sql中如何按某字段值的首字母分组?