【问题标题】:Getting cost and hours for each order获取每个订单的成本和时间
【发布时间】:2015-04-25 05:28:44
【问题描述】:

我有以下六张表:

员工

PK: employeeID;     
FK: empBranch references BRANCH;
FK: empSupervisor references EMPLOYEE

客户

PK: customerID

订单

PK: orderNumber
FK: customerID references CUSTOMER; 
FK: salesPerson references EMPLOYEE

产品

PK: productCode

PRODLINE

PK: orderNumber + prodCode
FK: orderNumber references ORDERS;
FK: prodCode references PRODUCT

INSTLINE

PK: orderNumber + instType
FK: orderNumber references ORDERS; 
FK: instType refesnrences INSTALLATION

我正在做一个项目,但被困在了两者之间。有人可以帮我列出每个订单的订单号、订单日期、销售人员的员工 ID、产品总金额和安装总金额。产品的总金额是单价乘以订购产品的数量之和。安装总金额为小时数乘以安装类型计费的总和。 两个小时以来我一直在尝试查询它。请帮助

答案中提到的上述部分的解决方案

Select o.ORDERNUMBER, ORDERDATE, SALESPERSON, 
SUM (PRICE * QUANTITY) as TOTALPRODUCTAMOUNT, 
SUM (HOURS * RATE) as TOTALINSTALLCOST 
from ORDERS o 
join PRODLINE pl on pl. ORDERNUMBER = o. ORDERNUMBER
join PRODUCT p on p.PRODUCTCODE = pl. PRODUCTCODE
join INSTLINE il on il. ORDERNUMBER = o. ORDERNUMBER
join INSTALLATION i on i.INSTALLTYPE = il.INSTTYPE
group by o. ORDERNUMBER, ORDERDATE, SALESPERSON;

编辑: 假设订单的总金额由 TOTALPRODUCTAMOUNT 和 TOTALINSTALLCOST 之和给出。一个分支产生的收入是在该分支工作的销售人员的所有订单总额的总和。因此,我们需要计算出每个未能满足其收入目标的分支的分支编号、分支名称、收入目标以及产生的收入。

我们可以假设分支表如下:

【问题讨论】:

标签: mysql sql database


【解决方案1】:
select o.orderNumber,
       ordDate,
       salesPerson,
       SUM(price * quantity) as totalProductAmount,
       SUM(hours * billingRate) as totalInstallationAmount
from ORDERS o
join PRODLINE pl on pl.orderNumber = o.orderNumber
join PRODUCT p on p.productCode = pl.prodCode
join INSTLINE il on il.orderNumber = o.orderNumber
join INSTALLATION i on i.installationType = il.instType
group by o.orderNumber, ordDate, salesPerson

编辑:回答你的第二个问题。

select branchNumber,
       branchName,
       revenueTarget,
       SUM((price * quantity) + (hours * billingRate)) as revenueAttained
from BRANCH b
join EMPLOYEE e on e.empBranch = b.branchNumber
join ORDERS o on o.salesPerson = e.employeeID
join PRODLINE pl on pl.orderNumber = o.orderNumber
join PRODUCT p on p.productCode = pl.prodCode
join INSTLINE il on il.orderNumber = o.orderNumber
join INSTALLATION i on i.installationType = il.instType
group by branchNumber, branchName, revenueTarget

【讨论】:

  • 为什么要按 o.orderNumber、ordDate、salesPerson 分组而不是按 o.orderNumber 分组?
  • 你能解释一下你是如何得到结果的吗?
  • 如果您的select 语句中有任何列未包含在group by 子句或聚合函数中,例如SUM,您将收到错误消息。
  • 我可以计算 totalProductAmount 和 totalInstallationAmount 的总和吗?
【解决方案2】:

分行总计:

select
     e.EMPBRANCH,
     b.BRANCHNAME, 
     b.REVENUETARGET,
     SUM(price * quantity) as BranchTotalProductAmount,
     SUM(hours * billingRate) as BranchTotalInstallationAmount
   from ORDERS o
   join PRODLINE pl 
     on pl.orderNumber = o.orderNumber
   join PRODUCT p 
     on p.productCode = pl.prodCode
   join INSTLINE il 
     on il.orderNumber = o.orderNumber
   join INSTALLATION i 
    on i.installationType = il.instType
   join EMPLOYEE e 
    on e.EMPLOYEEID = o.SALESPERSON
   join BRANCH b 
    on b.BRANCHNUMBER = e.EMPBRANCH      
 GROUP BY e.EMPBRANCH, b.BRANCHNAME, b.REVENUETARGET
 HAVING b.REVENUETARGET < SUM(price * quantity) + SUM(hours * billingRate)

【讨论】:

  • 我们不需要所有结果,只需要分行编号、分行名称、receiver_target 以及每个未能满足其reserve_target 的分行的receiver_generated。
  • 我想要第二个查询的解决方案
  • 请查看修改后的答案
猜你喜欢
  • 2022-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-03
  • 2015-12-01
  • 1970-01-01
  • 2021-02-18
  • 2013-08-15
相关资源
最近更新 更多