我正在尝试复制客户的销售统计电子表格,但使用的是我们建立的模式。
电子表格如下所示:
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
如何获取每个制造商每个月的总数?
答案 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)