基于PostgreSQL数据库的周、月数据统计方法

最近碰到一个需求是统计每周的周每一个用户的局数总和、每个月每一个用户的局数总和,首先有日表记录每一个用户天天的局数之和,日表的表结构以下:sql

create table user_day(
    log_date date not null,
    user_id int not null,
    round_count int not null
);

表中数据以下:函数

那么咱们能够利用extract这个函数把日数据聚合为周数据,SQL以下:code

SELECT
	log_year,
	log_week,
	user_id,
	SUM (round_count) AS round_count
FROM
	(
		SELECT
			EXTRACT (YEAR FROM log_date) AS log_year,
			EXTRACT (week FROM log_date) AS log_week,
			user_id,
			round_count
		FROM
			user_day
	) AS A
GROUP BY
	log_year,
	log_week,
	user_id
ORDER BY
	log_year,
	log_week,
	user_id;

extract函数能够从date类型或timestamp类型的变量中提取出年、月、日、时、分、秒这些数据,所以能够从上述的log_date中提取出年和周来,将日数据变为周数据,再对相同周进行group by便可获得聚合后的周数据,以下所示:blog

同理,能够从上述的log_date中提取出年和月来,而后将日数据变为月数据,再对相同的月进行group by便可获得聚合后的月数据,SQL以下:table

SELECT
	log_year,
	log_month,
	user_id,
	SUM (round_count) AS round_count
FROM
	(
		SELECT
			EXTRACT (YEAR FROM log_date) AS log_year,
			EXTRACT (MONTH FROM log_date) AS log_month,
			user_id,
			round_count
		FROM
			user_day
	) AS A
GROUP BY
	log_year,
	log_month,
	user_id
ORDER BY
	log_year,
	log_month,
	user_id;

查询结果以下:class

相关文章
相关标签/搜索