Sql 多表小计

Sql 多表小计,sql,xampp,Sql,Xampp,我想显示每个产品名称的小计,也许我所做的命令是无用的, 对我有什么建议吗 我有三张桌子 select ORDERS.ORDER_NUM, PRODUCT.PRODUCT_ID, PRODUCT.PRODUCT_NAME, ORDER_DETAILS.QUANTITY, ORDER_DETAILS.UNIT_PRICE, sum(ORDER_DETAILS.UNIT_PRICE) as SUBTOTAL from ORDER_DETAILS

我想显示每个产品名称的小计,也许我所做的命令是无用的, 对我有什么建议吗

我有三张桌子

select
    ORDERS.ORDER_NUM,
    PRODUCT.PRODUCT_ID,
    PRODUCT.PRODUCT_NAME,
    ORDER_DETAILS.QUANTITY,
    ORDER_DETAILS.UNIT_PRICE,
    sum(ORDER_DETAILS.UNIT_PRICE) as SUBTOTAL
from
    ORDER_DETAILS
    inner join ORDERS on ORDER_DETAILS.ORDER_NUM = ORDERS.ORDER_NUM
    inner join PRODUCT on ORDER_DETAILS.PRODUCT_ID = PRODUCT.PRODUCT_ID
group by
    ORDER_DETAILS.ITEM_NUM
order by
    PRODUCT.PRODUCT_NAME;


您没有指定数据库。但是,您需要修复您的查询:

  • 如果按产品汇总,则订单和订单行中的详细信息不适用
  • 选择
    分组依据
    列表应一致
  • 你想要的总数可能是价格乘以数量
因此,查询应该更像这样:

select p.PRODUCT_ID, p.PRODUCT_NAME,
       sum(od.UNIT_PRICE * od.QUANTITY) as SUBTOTAL
from ORDER_DETAILS od join
     ORDERS o
     on od.ORDER_NUM = o.ORDER_NUM join
     PRODUCT p
     on od.PRODUCT_ID = p.PRODUCT_ID
group by p.PRODUCT_ID, p.PRODUCT_NAME
order by p.PRODUCT_NAME;

还要注意表别名的使用,这样查询更易于编写和读取。

定义产品小计?同时标记您的数据库并提供示例数据和所需输出将您的问题添加到您使用的数据库中。看起来您需要一个组总和,大多数DBMS支持:
Sum(ORDER\u DETAILS.UNIT\u PRICE)OVER(PARTITION BY PRODUCT\u ID)as SUBTOTAL
并删除组。
select p.PRODUCT_ID, p.PRODUCT_NAME,
       sum(od.UNIT_PRICE * od.QUANTITY) as SUBTOTAL
from ORDER_DETAILS od join
     ORDERS o
     on od.ORDER_NUM = o.ORDER_NUM join
     PRODUCT p
     on od.PRODUCT_ID = p.PRODUCT_ID
group by p.PRODUCT_ID, p.PRODUCT_NAME
order by p.PRODUCT_NAME;