postgresql 如何计算每月出版的刊物数目?

rqdpfwrv  于 2023-01-30  发布在  PostgreSQL
关注(0)|答案(1)|浏览(81)

社交网络上有一个帖子表,上面有出版日期和标题。
| 身份证|创建时间|标题|
| - ------|- ------|- ------|
| 1个|2022年1月17日08时50分58秒|俄罗斯联邦储蓄银行是最好的银行|
| 第二章|2022年1月17日18时36分41秒|Visa与万事达卡|
| 三个|2022年1月17日16时16分17秒|Visa vs银联|
| 四个|2022年1月17日18时01分|万事达卡vs银联|
| 五个|2022年1月16日16时44分36秒|Hadoop或Greenplum:利弊|
| 六个|2022年1月16日14时57分32秒|NFC:无线支付|
我需要计算每月出版的刊物数目,包括每月的第一天,以及职位数目增加的百分比(出版物)相对于上月的百分比。结果表中的数据应按时间顺序排列。消息数增加的百分比可以是负数,结果应四舍五入至小数点后一位,并加上%符号。
表格结果
| 日|计数|趋势_增长|
| - ------|- ------|- ------|
| 2022年2月1日|一百七十五|零|
| 二○二二年三月一日|三百三十八|百分之九十三点一|
| 2022年4月1日|三四五|百分之二点一|
| 2022年5月1日|二百九十五|-14.5%|
| 2022年6月1日|三百三十|百分之十一点九|
我看了文档,但我不知道如何做到这一点。

8qgya5xd

8qgya5xd1#

step-by-step demo: db<>fiddle

SELECT 
    *,
    (count * 100 / prev_count - 100)::text || '%'                 -- 4
FROM (
    SELECT
        *,
        lag(count) OVER (ORDER BY pub_month) as prev_count        -- 3
    FROM (
        SELECT
            date_trunc('month', pub_date)::date as pub_month,     -- 1
            COUNT(*)                                              -- 2
        FROM mytable
        GROUP BY 1
    ) s
) s

1.将所有日期标准化为该月的第一天(如果您喜欢这样看,可以“截断”日期部分)
1.对所有标准化日期进行分组,并按标准化日期/月份对所有条目进行计数
1.使用lag() window function将上一个盘点结果移到当前行,现在可以直接比较上个月和本月的盘点
1.计算百分比。结果是一个数字类型。所以可以将其转换为text类型,以便以后添加百分比字符。

相关问题