You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

SQL技术需求:查询订单的产品数量与总价值(附表结构)

搞定这个订单统计SQL查询!

嘿,我来帮你解决这个需求!要获取每个订单的订单ID、用户名、日期、产品总数量和订单总价值,我们需要把两张表关联起来,再做聚合计算。下面给你两种实用的写法:

通用写法(所有SQL数据库都兼容)

这是最基础也最通用的实现方式,用GROUP BY来分组统计:

SELECT 
    o.ID AS Order_ID,
    o.UserName,
    o.date,
    SUM(pio.Qty_Purchased) AS Number_Of_Products,
    SUM(pio.TotalPrice) AS Order_Total_Value
FROM 
    tbl_Order o
JOIN 
    tbl_Products_In_Order pio ON o.ID = pio.Order_ID
GROUP BY 
    o.ID, o.UserName, o.date;

写法说明

  • JOIN将订单表和订单产品表通过Order_ID关联,确保每个订单的用户信息和对应产品数据匹配
  • SUM(pio.Qty_Purchased)会把同一订单下所有产品的购买数量求和,得到该订单的产品总数量
  • SUM(pio.TotalPrice)则聚合同一订单下所有产品的总价,得到订单的总价值
  • GROUP BY后需列出所有非聚合字段(订单ID、用户名、日期),这是SQL标准要求,确保分组逻辑正确

进阶写法(支持窗口函数的数据库可用)

如果你使用的是MySQL 8+、PostgreSQL、SQL Server这类支持窗口函数的数据库,可以试试这种写法,适合需要同时查看订单明细和聚合数据的场景:

SELECT DISTINCT
    o.ID AS Order_ID,
    o.UserName,
    o.date,
    SUM(pio.Qty_Purchased) OVER (PARTITION BY o.ID) AS Number_Of_Products,
    SUM(pio.TotalPrice) OVER (PARTITION BY o.ID) AS Order_Total_Value
FROM 
    tbl_Order o
JOIN 
    tbl_Products_In_Order pio ON o.ID = pio.Order_ID;

进阶写法优势

  • PARTITION BY o.ID表示按订单ID分组计算聚合值,无需单独写GROUP BY子句
  • 添加DISTINCT是为了让每个订单只返回一条统计结果,避免每条产品记录重复显示聚合数据
  • 如果之后需要查看订单内的具体产品明细,去掉DISTINCT就能同时获取明细和订单统计信息

最终输出结果

用你提供的测试数据运行上述SQL,会得到如下结果:

Order_IDUserNamedateNumber_Of_ProductsOrder_Total_Value
1john2017年3月30日58.00
2mike2017年3月31日18.00

内容的提问来源于stack exchange,提问作者John AJ

火山引擎 最新活动