SELECT DATE_FORMAT(created_at, '%Y-%m') AS month,
AVG(total_amount/count) AS average_subscription_amount
FROM
(SELECT SUBSTRING_INDEX(order_id, '_', 1) AS subscription_id,
SUM(total_amount) AS total_amount,
COUNT(DISTINCT SUBSTRING_INDEX(order_id, '_', 2)) AS count,
created_at
FROM subscription_orders
GROUP BY subscription_id, YEAR(created_at), MONTH(created_at)
) AS subscriptions
GROUP BY month
ORDER BY month;
其中,subscription_orders
为包含订阅订单信息的表,包括order_id
(订单号)、total_amount
(订单金额)、created_at
(订单创建时间)等信息。
解释一下代码:
首先,我们使用SUBSTRING_INDEX
函数将order_id
拆分为subscription_id
和订阅月份。
我们将订阅金额、订阅数量和订阅月份分组,计算每个订阅月份的平均订阅金额。这里使用了SUM
和COUNT
函数计算总金额和总数量。
最后,我们按月份对平均订阅金额进行排序,并将其输出。
注意,我们使用了DATE_FORMAT
函数将created_at
的时间戳格式化为YYYY-MM
的字符串格式,以便按月份分组和排序。
上一篇:按年/月计数和分组数据