每月累计总数和 Postgresql

2024-01-12

我正在尝试计算 dellstore2 数据库的累计用户数。看看这里的答案和其他论坛,我用了这个

select 
date_trunc('month',orderdate),
sum(count(distinct(customerid)))
   over (order by date_trunc('month',orderdate))
from orders group by date_trunc('month',orderdate)

这返回

2004-01-01 00:00:00.0   979
2004-02-01 00:00:00.0   1,952
2004-03-01 00:00:00.0   2,922
2004-04-01 00:00:00.0   3,898
2004-05-01 00:00:00.0   4,873
2004-06-01 00:00:00.0   5,846
2004-07-01 00:00:00.0   6,827
2004-08-01 00:00:00.0   7,799
2004-09-01 00:00:00.0   8,765
2004-10-01 00:00:00.0   9,745
2004-11-01 00:00:00.0   10,710
2004-12-01 00:00:00.0   11,681

每个月都是

979
973
970
976
975
973
981
972
966
980
965
971

从前几项来看,似乎总体不错。但当我跑的时候

select count(distinct(customerid)) from orders

对于整个事情,我得到

8996

这与第一个输出 11,681 中的最后一项不一致。我猜上面的计算无法确定跨月份的唯一性。此计算最快的方法是什么(最好不使用自连接)?


您可以使用子查询,如下所示,而不是直接从订单中选择:

SELECT  OrderDate,
        SUM(COUNT(DISTINCT customerid)) OVER (ORDER BY OrderDate)
FROM    (   SELECT  CustomerID, 
                    DATE_TRUNC('MONTH', MIN(OrderDate)) AS OrderDate
            FROM    Orders
            GROUP BY CustomerID
        ) AS Orders
GROUP BY OrderDate

我认为这会按要求工作。

http://sqlfiddle.com/#!1/7a8cc/1 http://sqlfiddle.com/#!1/7a8cc/1

EDIT

如果您仍然需要这两种方法(即不同的和运行总计),您可以使用以下方法:

SELECT  OrderDate,
        COUNT(DISTINCT CustomerID) AS MonthTotal,
        SUM(COUNT(DISTINCT customerid)) OVER (ORDER BY OrderDate) AS CumulativeTotal,
        SUM(COUNT(DISTINCT CASE WHEN OrderNumber = 1 THEN customerid END)) OVER (ORDER BY OrderDate) AS CumulativeDistinctTotal
FROM    (   SELECT  CustomerID, 
                    OrderDate,
                    ROW_NUMBER() OVER(PARTITION BY CustomerID ORDER BY OrderDate) AS OrderNumber
            FROM    Orders
        ) AS Orders
GROUP BY OrderDate

这里的例子:

http://sqlfiddle.com/#!1/7a8cc/10 http://sqlfiddle.com/#!1/7a8cc/10

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

每月累计总数和 Postgresql 的相关文章

  • 记录 Google Cloud SQL PostgreSQL 实例上的慢速查询

    我工作的公司使用 Google Cloud SQL 来管理生产中的 SQL 数据库 我们遇到了性能问题 我认为查看 监控高于特定阈值 例如 250 毫秒 的所有查询是一个好主意 除其他外 通过查看PostgreSQL 文档 https ww
  • 如何获得组中“中间”值的平均值?

    我有一个包含值和组 ID 的表 简化示例 我需要获取中间 3 个值的每组的平均值 因此 如果有 1 2 或 3 个值 则它只是平均值 但如果有 4 个值 它将排除最高值 5 个值将排除最高值和最低值 等等 我正在考虑某种窗口函数 但我不确定
  • 在 SQL 中如何获得整数的最大值?

    我试图从 MySQL 数据库中找出整数 有符号或无符号 的最大值 有没有办法从数据库本身提取这些信息 是否有我可以使用的内置常量或函数 标准 SQL 或 MySQL 特定的 At http dev mysql com doc refman
  • 如何编写不返回任何内容的 postgres 存储过程?

    如何在 postgres 中编写一个根本不返回值的简单存储过程 即使使用 void 返回类型 当我调用存储过程时 我也会返回一行 CREATE FUNCTION somefunc in id bigint RETURNS void AS B
  • 在 Oracle 中使用数据透视表的建议

    我需要一份报告 我应该使用数据透视表 报告将按类别分组 使用 case when 语句不好 因为有很多类别 您可以将 Northwind 数据库视为示例 所有类别将显示为列和报告将显示客户在类别中的偏好 我不知道另一个解决方案 并在互联网上
  • 我们可以使用sql列出MS Access数据库中的所有表吗?

    我们可以使用 sql 找到 ms access 中的所有表吗 就像我们在 sql server 中所做的那样 select from sys tables 在sqlite中 SELECT FROM sqlite master where t
  • 配置 PostgreSQL 仅适用于 LOCALHOST 或指定的 ip + 端口 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想将 PostgreSQL 配置为仅接受来自指定 IP 的连接 它不应接受来自任何其他 IP 的请求 以下示例 pg hba conf
  • LEFT JOIN 比 INNER JOIN 快得多

    我有一张桌子 MainTable 有超过 600 000 条记录 它通过第二个表连接到自身 JoinTable 在父 子类型关系中 SELECT Child ID Parent ID FROM MainTable AS Child JOIN
  • sql直接获取表行数的方法

    stackoverflow 的朋友们大家好 我的例行程序中有一个我认为不必要的步骤 假设您想从图库中获取所有图像 并限制每页一定数量的图像 db PDO object start pagenum x images per page limi
  • postgresql ON CONFLICT 具有多个约束

    有一个约束违规处理 冲突时 语句 如果我想检查 1 个 约束 则工作正常 例如 INSERT INTO my table co1 col2 colN VALUES ON CONFLICT col1 col2 DO NOTHING or up
  • 总结同一个 SQL 表上的两个条件

    给定一个 SQL 表 Transactions ID INT COMPANY ID INT STATUS INT where STATUS IN 0 1 表示免费交易并且STATUS IN 2 3 表示可计费交易 简单的 我希望 ANSI
  • 如何处理多个连接

    我有一个复杂的查询 需要总共 4 个表中的字段 内部联接导致查询花费的时间比应有的时间长得多 我已经运行了一个 EXPLAIN 语句 其可视化结果附在下面 这是我的查询 SELECT pending corrections correcte
  • 有什么好的方法可以在 SQL Server 中构建逗号分隔列表吗?

    在 Firebird 中 有一个聚合称为List http www firebirdsql org refdocs langrefupd21 aggrfunc list html它将多个结果转换为逗号分隔的字符串 SQL Server 中似
  • 何时计划 (SELECT) 查询?

    在 PostgreSQL 中 什么时候计划 SELECT 查询 Is it 在报表准备时 或者 在处理 SELECT 开始时 或者 别的东西 我问的原因是 Stackoverflow 上有一个问题 相同的查询 两种不同的方式 性能截然不同
  • Postgres 多重连接

    这是一个 postgres 数据库 我试图从品种表中提取狗的品种名称 卡斯罗 拉布拉多等 以根据动物表中的外键进行显示 我的问题是动物表有两个外键指向这个单一品种表 并且我的查询不断出错 第一个品种名称将根据左连接返回 但第二个品种名称无法
  • 使用 libpqxx 批量存储数据或如何在 libpqxx 中使用 COPY 语句

    要在 PostgreSQL 中插入批量数据 填充数据库 最快的方法是使用 COPY Source https stackoverflow com questions 758945 whats the fastest way to do a
  • SQLAlchemy:检查给定值是否在列表中

    问题 在 PostgreSQL 中 检查某个字段是否在给定列表中是使用IN操作员 SELECT FROM stars WHERE star type IN Nova Planet SQLAlchemy 的等价物是什么INSQL查询 我尝试过
  • 用户表到用户和用户首选项。这是正常化了吗?

    我有一张桌子叫Users其偏好列表不断增加 这些首选项可以包括 ReligionId 它将连接到另一个包含宗教列表的表 偏好列表正在不断增加 我想把它分开Users表分成2个表 我认为行之有效的策略是制作一个单独的表 名为UserPrefe
  • 哪个 SQL 查询返回每个唯一 A 列的具有最新日期和时间(B 列和 C 列)的行?

    哪个 SQL 查询返回每个唯一 A 列的具有最新日期和时间 B 列和 C 列 的行 If C实际上是一个datetime带日期的列and设置时间信息 可以 select a max c from table group by a If B
  • PostgreSQL 索引创建时间

    我可以使用什么查询来找出数据库中创建特定索引 唯一或非唯一 的时间 日期 基本上我想找出过去一个月左右创建的索引 这不可能 没有关于创建关系 索引等的时间的信息

随机推荐

  • 在 MSBuild 中找出当前操作系统的“位”

    我有一个构建脚本 需要对可执行文件的路径进行硬编码 路径是 C Program Files Microsoft Visual Studio 9 0 SmartDevices SDK SDKTools cabwiz exe 这工作得很好 但现
  • 如何执行 Bash 命令并收集 Java 的输出?

    如何执行 Bash 命令并收集 Java 的输出 大家好 基本上我正在编写一个基本的控制台应用程序 并且希望能够从中运行命令 例如 sudo halt ifconfig 等 有什么见解吗 您可以使用流程构建器 http download o
  • 使用 Lazy 是否会降低性能?

    最近 我遇到了一个单例类的问题 该类延迟初始化字典 其中第二个线程会在实际填充字典之前尝试使用它 所以我通过以下方式实现了变量初始化Lazy
  • Gandi.net 和 Heroku 域路由

    我的 io 域适用于 www domain io 但不适用于 domain io 版本 以下是我尝试过的每个版本和修订版 每个版本和修订版之间都有充足的时间 我等 10800 IN A 174 129 212 2 10800 IN A 75
  • subprocess.check_output():失败时显示输出

    的输出subprocess check output 目前看起来像这样 CalledProcessError Command foo returned non zero exit status 1 有没有办法获得更好的错误消息 我想看看st
  • 在哪里可以学习 DirectX 编程? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想学习 C 编程中的 DirectX 我决定学习DirectX 于是在网上找了一些教程 但是都是very复杂且难以理解 我花了3天时间看
  • .cc 和 .cpp 文件后缀有什么区别?

    有什么区别 cc and cpp文件扩展名 从Google 我了解到它们都来自C 语言 但我不确定它们之间的区别 惯例 从历史上看 C 源文件的后缀是 C 这在第一次移植 C 时引起了一些问题 对于文件名中大小写不重要的系统 不同的用户采用
  • 如何在 Substrate 的智能合约平台 ink 上保存字符串值?

    我最初尝试了这个问题中所教授的实现 如何在 Substrate 上保存字符串值 https stackoverflow com questions 63221904 how can i save string value on substr
  • 如何通过 rmarkdown 自动将 networkD3::sankeyNetwork() 保存到静态图像中?

    当我在 rmarkdown 中编写报告时 我的所有数据都会自动保存在该文件夹下graphs 然而 由于桑基图不同 它不会自动保存为图片 png 等 有解决方法吗 无需通过 RStudio Plots 面板手动保存每个图表 I saw 这个问
  • 如何在 Kotlin 中打印 ClosedRange

    我正在学习 Kotlin 并且我正在尝试理解Ranges 我创建了一系列String如下 val alpha A Z 我想打印我写的这个 for item in alpha println item 但它给出了错误 错误 13 18 Kot
  • 什么时候工厂方法比简单工厂更好,反之亦然?

    我正在阅读 Head First Design Patterns 一书 我相信我了解简单工厂和工厂方法 但我很难看出工厂方法相对于简单工厂带来的优势 如果对象 A 使用简单工厂来创建其 B 对象 那么客户端可以这样创建它 A a new A
  • 到 Out-GridView 和 Out-File 的管道有不同的行?

    以下命令仅返回一行 参数 Context 10被忽略 select string path file txt pattern Context 10 Out GridView 但是 以下命令创建一个包含所有行的文件 select string
  • logback 在 Flink 中不起作用

    我有一个单节点 Flink 实例 它在 lib 文件夹中具有 logback 所需的 jar logback classic jar logback core jar log4j over slf4j jar 我已从 lib 文件夹中删除了
  • 如何在 iOS 中用渐变填充由 CGPoints 定义的形状?

    我在代码中设置了自定义形状的箭头 我想做的就是用渐变填充它 问题是 我不知道如何用渐变填充非矩形形状 暗框内的空间 有任何想法吗 Define colours used in drawing CGContextRef context UIG
  • UILabel 默认字偶距与 CATextLayer 不同

    我有一个UILabel与字符串 LA 我也有一个CATextLayer具有相同的字符NSAttributedString分配给其string财产 字距调整UILabel与CATextLayer 这是代码 void viewDidLoad s
  • ExecutorService 与 Swing 计时器

    我一直在读肮脏的有钱客户 http filthyrichclients org 最近注意到 虽然Java的版本是6 但是并没有提到Concurrent Framework 因此 他们谈论 java util Timer 和 javax sw
  • 如何绑定到用户控件的属性?

    在 Windows 应用商店应用中 您创建一个用户控件来封装和重用代码隐藏和布局 XAML 一个简单的用户控件可能如下所示
  • Android 中的文件浏览器[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • PHP 中的 INET_ATON() 和 INET_NTOA()?

    我想将 IP 地址存储在数据库中 但我还需要在整个应用程序中使用它们 我读到关于使用INET ATON and INET NTOA 在我的 MySQL 查询中 从 IP 地址中获取 32 位无符号整数 这正是我想要的 因为它将比使用 cha
  • 每月累计总数和 Postgresql

    我正在尝试计算 dellstore2 数据库的累计用户数 看看这里的答案和其他论坛 我用了这个 select date trunc month orderdate sum count distinct customerid over ord