【问题标题】:How to calculate total amount of products sold per year?如何计算每年销售的产品总量?
【发布时间】:2019-10-25 06:47:04
【问题描述】:

我有 3 张桌子:

  1. 产品(有产品 ID、价格等)
  2. 订单(包含订单 ID、日期等)
  3. orders_products(包含产品数量等订单详情)

我想计算每年销售的产品总量。为此,我编写了以下查询:

SELECT YEAR(`o`.`date_purchased`) AS year,
       SUM(`op`.`products_quantity`) AS TotalUnits,
       `p`.`products_id`,
       `p`.`products_price` AS price,
       ( SUM(`op`.`products_quantity`) * `p`.`products_price` ) AS TotalAmount
FROM   `orders` AS `o`
       INNER JOIN `orders_products` AS `op`
               ON `o`.`orders_id` = `op`.`orders_id`
       INNER JOIN `products` AS `p`
               ON `op`.`products_id` = `p`.`products_id`
GROUP  BY `p`.`products_id`
ORDER  BY year

它给了我以下结果集:

它给了我按产品分组的总金额。但我想得到按年份分组的总金额。

所以对于 2016 年(以及其他年份),我想要以下结果:

2016     10,606 (since 6478 + 632 + 2072 + 1424)

但我无法计算按年份分组的总金额,因为每种产品的价格不同。那么如何修改我现有的查询以获取每年销售的产品总量?

如果单用 MySQL 做不到,那我会毫不犹豫地使用 PHP。

【问题讨论】:

标签: mysql


【解决方案1】:

你只需要把数量和价格的乘积带入SUM,这样每个产品的数量就乘以它自己的价格:

SELECT YEAR(`o`.`date_purchased`) AS year,
       SUM(`op`.`products_quantity`) AS TotalUnits,
       SUM(`op`.`products_quantity` * `p`.`products_price`) AS TotalAmount
FROM   `orders` AS `o`
INNER JOIN `orders_products` AS `op` ON `o`.`orders_id` = `op`.`orders_id`
INNER JOIN `products` AS `p` ON `op`.`products_id` = `p`.`products_id`
GROUP  BY year
ORDER  BY year

【讨论】:

  • 好吧,sql中没有GROUP,只有GROUP BY
  • @ϻᴇᴛᴀʟ 我们都会偶尔打错字(嗯,至少我会)...感谢您指出。
  • @Nick,太棒了!您的解决方案为我提供了我正在寻找的确切结果。这是关键点SUM(op.products_quantity * p.products_price) AS TotalAmount。但是有一个错字GROUP。而且当然!我的 mysql 支持别名。
  • 是的,@ϻᴇᴛᴀʟ 刚刚指出了错字。当我剪切并粘贴您的查询时,不知何故我设法删除了BY。对不起...
  • @Nick,好的,现在我可以删除我的答案了。
猜你喜欢
  • 1970-01-01
  • 2023-01-19
  • 1970-01-01
  • 2021-12-17
  • 1970-01-01
  • 2022-11-11
  • 1970-01-01
  • 2020-06-10
  • 1970-01-01
相关资源
最近更新 更多