基於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

相關文章
相關標籤/搜索