我有以下查询,非常适合返回定义时间段内每个客户的订单数和值(value)。
SELECT
c.company,
c.email,
SUM(o.total_value) AS ttl_order_value,
COUNT(p.order_id) AS ttl_order_count
FROM merch_orders_ist AS o
INNER JOIN contacts_ern AS c
ON (o.contact_id = c.contactid)
INNER JOIN merch_payments_ist AS p
ON (o.id = p.order_id)
WHERE DATE(p.date_of_payment) BETWEEN '2014-01-01' AND '2014-12-31'
GROUP BY c.contactid
ORDER BY ttl_order_value DESC
我需要扩展此查询以添加另外两列,其中包括第二个日期范围(例如 2015 年和 2014 年)的订单总额和每个客户的订单总值(value)。我正在寻找的结果看起来像这样......
| company | email | ttl_order_value_2015 | ttl_order_count_2015 | ttl_order_value_2014 | ttl_order_count_2014 |
---------------------------------------------------------------------------------------------------------------
提前谢谢您!
最佳答案
我给出了伪代码,需要一些修改,但应该根据您的要求工作。
注意:如果语法不起作用,请将 SUM(o.total_value) 删除为 o.total_value 。您可以通过编写一个简单的外部查询和分组来使用 SUM
SELECT
c.company,
c.email,
-- Using date put some condtions like >,< or extarct year and compare
DECODE(p.date_of_payment, '2014',SUM(o.total_value),0) AS ttl_order_value_2014,
Decode(p.date_of_payment,'2014' ,COUNT(p.order_id),0) AS ttl_order_count_2014,
DECODE(p.date_of_payment, '2015',SUM(o.total_value),0) AS ttl_order_value_2015,
Decode(p.date_of_payment,'2015' ,COUNT(p.order_id),0) AS ttl_order_count_2015,
FROM merch_orders_ist AS o
INNER JOIN contacts_ern AS c
ON (o.contact_id = c.contactid)
INNER JOIN merch_payments_ist AS p
ON (o.id = p.order_id)
WHERE DATE(p.date_of_payment) BETWEEN '2014-01-01' AND '2014-12-31'
GROUP BY c.contactid
ORDER BY ttl_order_value DESC
关于MySQL 查询 : Customer Order Value and Order Count for Multiple Date Ranges,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34324499/