在做后台管理系统的时候,有很大概率是要与各种图表数据打交道,
那么如何通过SQL查出基本图表的数据呢,以折线图为例,
X轴为日期,Y轴为统计数据,那么我们通过SQL如何查询出连续日期下的统计数据呢,
假设我们数据库有一张表为 A,A表有createdAt,count字段,count表示数量,createdAt表示生成数据的日期,
A表中可能存了多条相同日期但是不同数量的数据,比如:
| createdAt | count |
| 2024-04-01 | 1 |
| 2024-04-01 | 12 |
| 2024-04-02 | 1 |
那么我想查询从4月1到4月7的统计数据,并保证日期连续性,2024-04-01 2024-04-02 ... 2024-04-07,这里用PostgreSQL 来实现
WITH date_sequence AS ( SELECT start_date + sequence_num AS continuous_date FROM (SELECT '2024-04-01'::date AS start_date, generate_series(0, 9) AS sequence_num) AS dates ) SELECT continuous_date,COALESCE(SUM(count),0) AS count FROM date_sequence LEFT JOIN (SELECT id, TO_CHAR("createdAt", 'YYYY-MM-DD')::date AS date1 FROM "A") AS subquery ON date_sequence.continuous_date = subquery.date1 GROUP BY continuous_date ORDER BY continuous_date ASC
解释:
generate_series 用于生成一个数字列,在PostgreSQL中,对日期数据进行运算操作,会使日期进行对应的变更,如:
然后用WITH 将这个日期列封装一下,然后再去LEFT JOIN查A表,用日期进行关联,因为A表中会有重复的,所以我们用“日期”字段进行GROUP BY ,再通过SELECT SUM("count")字段,就能查出日期列对应的数据了,然后再用 COALESCE 函数将为null的数据填充为0就好了
最后查出的数据就是这样子的:
标签:count,04,sequence,2024,date,日期,SQL,折线图,数据 From: https://www.cnblogs.com/alone4436/p/18150261