SELECT
c.id,
c.name,
COUNT(o.id) AS paid_order_count,
COALESCE(SUM(o.total_amount), 0) AS paid_revenue
FROM customers c
LEFT JOIN orders o
ON o.customer_id = c.id
AND o.status = 'paid'
AND o.created_at >= $1
AND o.created_at < $2
WHERE c.segment = $3
GROUP BY c.id, c.name
ORDER BY paid_revenue DESC
LIMIT 50;
- 它做了什么:统计指定客户分层在时间窗口内的已支付订单数和收入,并按收入排序。
- 参数:
$1:开始时间,含。$2:结束时间,不含。$3:客户分层,例如enterprise。
- 正确性提醒:时间窗口建议使用半开区间,避免月底/日切时重复计算边界订单。