【问题标题】:How can I calculate the number of publications per month?如何计算每月的出版物数量?
【发布时间】:2023-01-26 20:29:18
【问题描述】:

社交网络上有一个帖子表,其中包含发布日期和标题。

id created_at title
1 2022-01-17 08:50:58 Sberbank is the best bank
2 2022-01-17 18:36:41 Visa vs MasterCard
3 2022-01-17 16:16:17 Visa vs UnionPay
4 2022-01-17 18:01:00 Mastercard vs UnionPay
5 2022-01-16 16:44:36 Hadoop or Greenplum: pros and cons
6 2022-01-16 14:57:32 NFC: wireless payment

我需要计算每个月的发布数量,说明该月的第一个日期和百分比 与上个月相比,帖子(出版物)数量的增加。结果表中的数据应按时间顺序排列。消息数量增加的百分比可以是负数,结果应该 通过添加 % 符号四舍五入到小数点后一位。

表格结果

dt count prcnt_growth
2022-02-01 175 null
2022-03-01 338 93.1%
2022-04-01 345 2.1%
2022-05-01 295 -14.5%
2022-06-01 330 11.9%

我阅读了文档,但我不明白该怎么做..

【问题讨论】:

  • 你好,你应该避免在你的帖子中使用image
  • 抱歉,我不知道如何在帖子中创建表格(
  • 编辑队列已满,但您可以编辑自己的问题,here's the edited version。可以了解更多formatting here
  • 非常感谢,我修复了帖子

标签: postgresql


【解决方案1】:

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. 将所有日期标准化为该月的第一天(如果您喜欢这样看,则“截断”日期部分)
  2. 将所有标准化日期分组并计算每个标准化日期/月的所有条目
  3. 使用lag() window function将之前的计数结果移到当前行。现在您可以直接比较上个月和当月的计数
  4. 计算百分比。结果是数字类型。所以可以把它转换成text类型之后加上百分号。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-19
    相关资源
    最近更新 更多