查询过去一年的制造商收入

时间:2019-01-18 16:46:58

标签: mysql

我正在尝试复制客户的销售统计电子表格,但使用的是我们建立的模式。

电子表格如下所示:

Month  | Manufacturer A | Manufacturer B | Manufacturer C | ... etc

Jan-17 | £40,000        | £50,000        | £60,000        |
Feb-17 | £40,000        | £50,000        | £60,000        |
Mar-17 | £40,000        | £50,000        | £60,000        |
Apr-17 | £40,000        | £50,000        | £60,000        |
May-17 | £40,000        | £50,000        | £60,000        |
Jun-17 | £40,000        | £50,000        | £60,000        |
Jul-17 | £40,000        | £50,000        | £60,000        |
Aug-17 | £40,000        | £50,000        | £60,000        |
Sept-17| £40,000        | £50,000        | £60,000        |
Oct-17 | £40,000        | £50,000        | £60,000        |
Nov-17 | £40,000        | £50,000        | £60,000        |
Dec-17 | £40,000        | £50,000        | £60,000        |

我的模式如下:

Manufacturers:

id, name

Orders:

id, number, made (order date)

Items:

id, order_id, manufacturer_id, name, price

如何获取每个制造商每个月的总数?

2 个答案:

答案 0 :(得分:1)

您需要一个“透视”功能,这在MySQL中是本机不可用的。

这可能不是您想要的答案,但这是我有时使用的答案。如果您事先知道制造商的数量,就可以进行某种模拟一个支点。

但是,这需要很长时间才能查询,有时我有时使用动态SQL来实现。

例如:

select
  year(o.order_date),
  month(o.order_date),
  sum(case when m.id = 'A' then i.price end) as 'Manufacturer A',
  sum(case when m.id = 'B' then i.price end) as 'Manufacturer B',
  ...
from orders o
join items i on i.order_id = o.id
join manufacturers m on m.id = i.manufacturer_id
group by year(o.order_date), month(o.order_date)

答案 1 :(得分:0)

确保您知道所有制造商的列表,可以使用条件聚合。以下查询演示了如何与2个制造商A和B进行此操作:

SELECT
    DATE_FORMAT(o.made, '%b-%y'),
    SUM(CASE WHEN m.name = 'Manufacturer A' THEN i.price ELSE 0 END) "Manufacturer A",
    SUM(CASE WHEN m.name = 'Manufacturer B' THEN i.price ELSE 0 END) "Manufacturer B"
FROM
    orders o
    LEFT JOIN items i
        ON  o.order_id = i.id
    LEFT JOIN manufacters m
        ON manufacter_id = m.id
GROUP BY month(o.made)