我有两张桌子,订单和订单。我按日期报告销售情况,需要包括每个日期的每个订单项目的总成本价格和销售价格以及每个订单在每个日期的总交付成本:
表:订单
orderid date deliverycost
1 2000-01-01 5
2 2000-01-01 3
3 2000-01-02 0
4 2000-01-02 4
表:orderitem
orderitemdid orderid costprice sellingprice
1 1 10 12
2 1 2 4
3 2 10 12
4 3 5 6
5 3 4 10
6 4 1 2
我正在寻找一个提供以下输出的查询:
date costprice sellingprice deliverycost
2000-01-01 22 28 8
2000-01-02 10 18 4
我尝试过以下SQL:
SELECT
SUM(`orderitem`.`costprice`) AS `costprice`,
SUM(`orderitem`.`sellingprice`) AS `sellingprice`,
SUM(`order`.`delivery`) AS `delivery`,
DATE(`order`.`date`) AS `date`,
FROM
`order`
INNER JOIN
`orderitem`
ON
(`order`.`orderid` = `orderitem`.`orderid`)
GROUP BY
`date`
ORDER BY
`date`
问题在于我最终将交货价格乘以订单商品的数量,因此我希望在order
。delivery
之前执行SUM()。加入发生。
答案 0 :(得分:1)
可能与报价的不当使用有关 不要对列名使用单引号,但在需要时使用backtics
SELECT
SUM(`orderitem`.`costprice`) as costprice,
SUM(`orderitem`.`sellingprice`) as sellingprice,
SUM(`order`.`delivery`) as delivery,
DATE(`order`.`confirmdate`) as `date`,
FROM `order`
INNER JOIN `orderitem` ON `order`.`orderid` = `orderitem`.`orderid`
GROUP BY `date`
ORDER BY `date`
在您的情况下,也应该避免背景,因为您没有分隔的列名和保留字
SELECT
SUM(orderitem.costprice) as costprice,
SUM(orderitem.sellingprice) as sellingprice,
SUM(order.delivery) as delivery,
DATE(order.confirmdate) as date,
FROM order
INNER JOIN orderitem ON order.orderid = orderitem.orderid
GROUP BY date
ORDER BY date
并且为了避免使用笛卡尔积,您可以加入聚合表
SELECT
SUM(t.costprice) as costprice,
SUM(t.sellingprice) as sellingprice,
SUM(order.delivery) as delivery,
DATE(order.confirmdate) as date,
FROM order
INNER JOIN (
SELECT
orderitem.orderid
SUM(orderitem.costprice) as costprice,
SUM(orderitem.sellingprice) as sellingprice
from orderitem
group by orderitem.orderid
) t ON order.orderid = t.orderid
GROUP BY date
ORDER BY date