SQL 查询用于计算每个客户的订单数量和总金额

2024-06-19

我有两张桌子Order与列:

OrderID,OrderDate,CID,EmployeeID

And OrderItem与列:

OrderID,ItemID,Quantity,SalePrice

我需要返回客户 ID(CID)、每个客户的订单数以及每个客户所有订单的总金额。

到目前为止,我有两个单独的查询。其中一个给我客户订单的数量......

SELECT CID, Count(Order.OrderID) AS TotalOrders
FROM [Order]
Where CID = CID 
GROUP BY CID
Order BY Count(Order.OrderID) DESC;

另一个给我总销售额。我在组合它们时遇到了麻烦......

SELECT CID, Sum(OrderItem.Quantity*OrderItem.SalePrice) AS TotalDollarAmount
FROM OrderItem, [Order]
WHERE OrderItem.OrderID = [Order].OrderID
GROUP BY CID

我在 Access 2010 中执行此操作。


你会使用COUNT(DISTINCT ...)在其他 SQL 引擎中:

SELECT CID, 
       Count(DISTINCT O.OrderID) AS TotalOrders, 
       Sum(OI.Quantity*OI.SalePrice) AS TotalDollarAmount 
FROM [Order] O
INNER JOIN [OrderItem] OI
  ON O.OrderID = OI.OrderID
GROUP BY CID 
Order BY Count(DISTINCT O.OrderID) DESC

遗憾的是 Access 不支持。相反,您可以先获取订单美元金额,然后在计算订单数之前将它们合并:

SELECT CID,
       COUNT(Orders.OrderID) AS TotalOrders,
       SUM(OrderAmounts.DollarAmount) AS TotalDollarAmount
FROM [Orders]
INNER JOIN (SELECT OrderID, Sum(Quantity*SalePrice) AS DollarAmount 
      FROM OrderItems GROUP BY OrderID) AS OrderAmounts
  ON Orders.OrderID = OrderAmounts.OrderID
GROUP BY CID
ORDER BY Count(Orders.OrderID) DESC

如果您需要包括订单中不含商品的客户(不常见但可能),请更改INNER JOIN to LEFT OUTER JOIN.

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

SQL 查询用于计算每个客户的订单数量和总金额 的相关文章

  • SQL - 选择具有最大值的所有行

    我有这个 SQL 查询 SELECT id COUNT AS price FROM SELECT FROM rt WHERE somecondition AS st JOIN tt ON st id tt id GROUP BY id 现在
  • SQL Server:十进制精度/小数位数产生奇怪的结果

    我正在为一个项目编写一些 SQL 我注意到 SQL Server 中一些看似奇怪的行为 涉及除以小数时的答案 以下是一些示例 说明了我所看到的行为 DECLARE Ratio Decimal 38 16 SET Ratio CAST 210
  • 在 SQLite GROUP BY 查询的 SELECT 列表中包含额外的列是否安全?

    我有一个简单的 SQLite 表 名为 message sequence INTEGER PRIMARY KEY type TEXT content TEXT 我想获取每种类型的最后一条消息的内容 由其序列确定 令我惊讶的是 以下简单查询有
  • 高级 MySQL:查找民意调查响应之间的相关性

    我有四个 MySQL 表 users 身份证号 姓名 polls ID 文本 options id poll id 文本 回应 id poll id 选项 id 用户 id 给定一个特定的民意调查和一个特定的选项 我想生成一个表格 显示其他
  • 将 Linq 表达式转换为 SQL Server 查询

    我正在使用一些 crm 框架 该框架没有任何内部 orm 并且不使用实体框架 仅使用纯 sql 查询 我在数据库中的每个表都有实体 所以我有例如 public class Customer public string FirstName g
  • SQL IN 子句比单个查询慢

    我正在使用 Hibernate 的 JPA 实现和 MySQL 5 0 67 MySQL 配置为使用 InnoDB 在执行 JPA 查询 转换为 SQL 时 我发现使用IN子句比执行单个查询慢 例子 SELECT p FROM Person
  • 如何解决此错误:Py4JJavaError:调用 o70.showString 时出错?

    目前我正在开发 PySpark 和 DataFrame 我创建了一个数据框 from pyspark sql import import pandas as pd spark SparkSession builder appName Dat
  • 大型数据集的报告工具/查看器

    我有一个数据处理系统 可以根据其处理的数据生成非常大的报告 我所说的 大 是指该系统的 小 执行在转储到 CSV 文件中时会产生大约 30 MB 的报告数据 而大数据集大约为 130 150 MB 我确信有人有更大的想法 大 但这不是重点
  • SSRS报告不显示数据

    我刚刚创建了 SQL Server 2005 SSRS 报告 数据未显示在预览窗格中 数据集是根据字符串参数从存储过程正确填充的 我可以在数据窗格中执行它 在预览窗格中运行报表时 会显示正确的行数 但单元格的内容不包含任何数据 源数据集基于
  • SQL CASE 语句

    我有以下查询 我想将它们放入 sql CASE 语句中 这样我只有一个查询 但我不知道该怎么做 有人可以帮助我吗 IF SELECT EtlLoadId FROM ssislogs audit processcontrol WHERE Su
  • 带可选参数的 SQL 更新命令?

    我将大约 500 000 个对象插入数据库 其中许多对象是相同的 在数据库中具有相同的主键表示 但其他字段可能不同 因此我使用方法 更新 如果没有行受影响 插入 问题是 有时一个对象的某些字段设置为 null 从文件中无法读取 并且已经在数
  • Oracle 函数编译成功,但在执行 PLS-00221 时抛出错误:不是过程或未定义

    我有简单的oracle功能 create or replace function abs test func test in in number return number is test out number BEGIN test out
  • 访问 2010 DLookUp

    第一次使用 MS Access 遇到了一些问题 如果有人可以指出我正确的方向 所以我正在做一个模拟数据库 所以它看起来很傻 只是为了了解细节 目前需要一些有关 DLookUp 的帮助 我的数据库有两个表 具有以下字段 C ID课程PK 学生
  • 在两个以上的表上使用内联接删除查询

    我想使用两个以上表上的内联接从表中删除记录 假设我有表 A B C D 其中 A 的 pk 在所有其他提到的表中共享 然后如何编写删除查询以使用表 B 和 A 上的内联接从表 D 中删除记录 因为条件是从这两个表中获取的 我需要从 DB2
  • LINQ-to-SQL 是否支持组合查询?

    作为一名不懂 C 的程序员 我对 LINQ 查询的求值语义很好奇 如下所示 var people from p in Person where p age lt 18 select p var otherPeople from p in p
  • 使用 sql 查询选择最近 30 天

    我正在查找过去 30 天内周一 周二 周三 周四 周五 周六 周日的数量 我可以在没有实际数据库表的情况下选择最近 30 天的日期和星期几吗 就像是 SELECT everything between convert date GETDAT
  • 左连接,左表中没有重复行

    请看下面的查询 tbl 目录 Content Id Content Title Content Text 10002 New case Study New case Study 10003 New case Study New case S
  • SQL限制数据库中的最小值和最大值

    CREATE TABLE TBL CD CDnr int identity 1 1 CDTitel nvarchar 80 NOT NULL CDduur int CDprijs smallmoney 所以我正在创建这个表 有什么方法可以将
  • 简单的t-sql而不是触发器

    任何人都可以帮助解决简单的 t sql 脚本与板载触发器的问题吗 我使用非常简单的触发器将数据从一个表复制到另一个表 这些表之间没有关系 当我尝试在触发器创建后 从同一脚本 直接第一次插入数据时 我得到了所需的结果 但所有接下来的尝试都会失
  • 根据 SQL 查询的集合生成成员的“散点图”结果

    我有一个staff包含工作人员的数据库表 其中user no and user name列 我还有一个 department 包含员工可以加入的部门的表 其中dept no and dept name作为列 因为员工可以是多个部门的成员 所

随机推荐