我试图获得在过去31天内订购的每位客户所做的订单数量以及他们制作的总数量。我期望的输出将如下所示:在SQL中获取标准限制和总数 - 是否需要子查询?
count total name customer ID
--------------------------------------------
3 10 Sarah Smith 22
2 8 John Jenkins 15
1 5 Delia Denton 44
到目前为止,我有以下的,这完全适用于第一个要求:
SELECT COUNT(o.id), CONCAT(c.first_name, ' ', c.last_name) AS name, c.id AS "customer ID"
FROM orders o
JOIN customers c ON c.id = o.customer_id
WHERE order_date > (CURRENT_DATE - 31)
GROUP BY name, "customer ID"
ORDER BY count DESC
主要生产:
count name customer ID
-----------------------------------
3 Sarah Smith 22
2 John Jenkins 15
1 Delia Denton 44
但是,我有限子查询知识不会扩展到我可以如何集成一个来检索此结果集中每个客户的订单总数。 (本质上是相同的查询,但没有日期限制。)我不确定是否(或如何)将此作为过滤器以某种方式在所有订单的总套数中使用,或者是否正确的方式是将返回的ID在这里并将它们插入另一个查询中。我该怎么办?我在PostgreSQL 9.4上。
这是完美的!我需要了解的是'CASE'。非常感谢蒂姆。 –
另一种方式是'sum((order_date>(CURRENT_DATE - 31)):: integer)作为cnt_31' – Jasen
@Scott我给了你一个更新来过滤零31天计数。 –