SQL 查询一年内每个月的销售额并返回 List<Integer, BigDecimal>
可以使用如下的 SQL 语句查询一年内每个月的销售额:
SELECT MONTH(created_at) as month, SUM(total) as sales
FROM orders
WHERE created_at BETWEEN DATE_SUB(NOW(), INTERVAL 1 YEAR) AND NOW()
GROUP BY MONTH(created_at);
这条语句会查询 orders 表中一年内每个月的销售额,并按照月份进行分组,得到每个月的销售额总和。返回的结果是一个列表,包含每个月的月份和对应的销售额,月份使用 Integer 类型,销售额使用 BigDecimal 类型。
解释:
MONTH(created_at):提取created_at字段的月份,并作为month列返回。SUM(total):计算每个月份的销售额总和,并作为sales列返回。WHERE created_at BETWEEN DATE_SUB(NOW(), INTERVAL 1 YEAR) AND NOW():筛选过去一年的订单数据。GROUP BY MONTH(created_at):按照月份进行分组,以便计算每个月的销售额总和。
示例数据:
假设 orders 表中存在以下数据:
| id | user_id | created_at | total | |---|---|---|---| | 1 | 1 | 2022-12-01 | 100.00 | | 2 | 2 | 2022-12-15 | 200.00 | | 3 | 3 | 2023-01-10 | 300.00 | | 4 | 4 | 2023-01-20 | 400.00 | | 5 | 5 | 2023-02-05 | 500.00 |
执行上述 SQL 语句后,将返回以下结果:
| month | sales | |---|---| | 12 | 300.00 | | 1 | 700.00 | | 2 | 500.00 |
返回结果:
最终将返回一个 List<Integer, BigDecimal> 列表,例如:
List<Pair<Integer, BigDecimal>> salesData = new ArrayList<>();
// ... 将查询结果添加到 salesData 列表中 ...
其中,每个 Pair 对象包含两个元素:
- 第一个元素是
Integer类型的月份。 - 第二个元素是
BigDecimal类型的销售额。
注意:
- 为了确保数据类型的正确性,建议在使用 SQL 语句查询结果时,将月份转换为
Integer类型,将销售额转换为BigDecimal类型。 - 在实际应用中,可以使用数据库连接池和 JDBC API 来执行 SQL 查询并获取结果。
- 为了提高查询效率,可以对
created_at字段建立索引。
原文地址: https://www.cveoy.top/t/topic/nR8t 著作权归作者所有。请勿转载和采集!