从前有匹马叫代码
心若没有栖息的地方,到哪里都是流浪

在做后台管理系统的时候,有很大概率是要与各种图表数据打交道,

那么如何通过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就好了

最后查出的数据就是这样子的:

 

posted on 2024-04-22 11:10  从前有匹马叫代码  阅读(107)  评论(0编辑  收藏  举报