sql - Postgresql 查询获取一年内每月的计数

标签 sql database postgresql postgresql-9.5

在 MySQL 中

SELECT y, m, Count(users.created_date)
     FROM (
      SELECT y, m
      FROM
         (SELECT YEAR(CURDATE()) y UNION ALL SELECT YEAR(CURDATE())-1) years,
         (SELECT 1 m UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4
           UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8
           UNION ALL SELECT 9 UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12) months) ym
       LEFT JOIN users
       ON ym.y = YEAR(FROM_UNIXTIME(users.created_date))
          AND ym.m = MONTH(FROM_UNIXTIME(users.created_date))
     WHERE
       (y=YEAR(CURDATE()) AND m<=MONTH(CURDATE()))
       OR
       (y<YEAR(CURDATE()) AND m>MONTH(CURDATE()))
     GROUP BY y, m;

Mysql 输出

+------+----+----------------------+
| y    | m  | Count(users.created) |
+------+----+----------------------+
| 2012 |  5 |                 5595 |
| 2012 |  6 |                 4431 |
| 2012 |  7 |                 3299 |
| 2012 |  8 |                  429 |
| 2012 |  9 |                    0 |
| 2012 | 10 |                 3698 |
| 2012 | 11 |                 6208 |
| 2012 | 12 |                 5142 |
| 2013 |  1 |                 1196 |
| 2013 |  2 |                   10 |
| 2013 |  3 |                    0 |
| 2013 |  4 |                    0 |
+------+----+----------------------+

** 在 POSTGRESQL 查询中**

SELECT to_char(created_date, 'MM'),
       count(id)
FROM users
WHERE created_date >
      date_trunc('month', CURRENT_DATE) - INTERVAL '1 year'
GROUP BY 1

POSTGRESQL 输出 postgresql output

我可以知道如何像 mysql 输出一样获取 postgresql 输出吗?需要获取一年内当月的结果。

最佳答案

我假设您要查找的是 count 为 0 的行。如果是这种情况,您可以使用generate_series 并在表中使用左连接与数据:

    SELECT to_char(i, 'YY'), to_char(i, 'MM'),
        count(id)
    FROM generate_series(now() - INTERVAL '1 year', now(), '1 month') as i
    left join users on (to_char(i, 'YY') = to_char(created_date, 'YY') 
                        and to_char(i, 'MM') = to_char(created_date, 'MM') and login_type = 1)
    GROUP BY 1,2;

关于sql - Postgresql 查询获取一年内每月的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40048369/

相关文章:

sql - 按子模型属性对 ActiveRecord 模型进行排序?

sql - 连接两个具有不匹配行的表

php - 在数据库中保存包含复选框值的 list

c# - 如何实现 Singleton,它在 C# 中从 db 填充其值?

postgresql - 不接受嵌入对象的空值

SQL - 向结果集添加额外的行

SQL Server 2005 : Scale of numeric expression changes when adding SUM()

php - 在不提供链接标识符的情况下查询数据库是不好的做法吗?

ruby-on-rails - Rails - 是否使用多态来提高性能

postgresql - 如果不存在则创建数据库索引