首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL:查询构造需要帮助

SQL:查询构造需要帮助
EN

Stack Overflow用户
提问于 2010-04-29 09:30:34
回答 4查看 193关注 0票数 2

我在sql方面相对较新,需要一些基本查询结构的帮助。

Problem:根据一组参数从表中检索订单数量和客户id。

我想编写一个查询,以计算每个客户(列: Customerid)下的订单数量,以及订单数量应该大于或等于10并且订单状态应该处于活动状态的CustomerID。此外,我还想知道属于每个customerid的订单的第一个交易日期。

表描述:

product_orders

代码语言:javascript
复制
Orderid CustomerId Transaction_date Status
------- ---------- ---------------- -------
 1       23         2-2-10          Active
 2       22         2-3-10          Active
 3       23         2-3-10          Deleted
 4       23         2-3-10          Active

我编写的查询:

代码语言:javascript
复制
select count(*), customerid
  from product_orders
 where status = 'Active'
 GROUP BY customerid
 ORDER BY customerid;

上面的陈述给了我

客户标识下的所有订单之和,但不满足至少10个订单的条件。

  • i不知道如何显示客户id下的第一个交易日期和订单(状态:可以是活动的或被取消的)

理想解决方案应该如下所示:

代码语言:javascript
复制
Total Orders CustomerID Transaction Date (the first transaction date)
------------ ---------- ----------------
11           23         1-2-10

提前谢谢。希望你们能过来帮我一把。

干杯,

莱昂尼达斯

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-04-29 09:37:24

代码语言:javascript
复制
SELECT
    COUNT(*) AS [Total Orders],
    CustomerID,
    MIN(Transaction_date) AS [Transaction Date]
FROM product_orders
WHERE product_orders.Status = 'Active'
GROUP BY
    CustomerId
HAVING COUNT(*) >= 10
票数 1
EN

Stack Overflow用户

发布于 2010-04-29 09:35:29

HAVING将允许您过滤像COUNT()这样的聚合& MIN()将显示第一次约会。

代码语言:javascript
复制
select 
  count(*), 
  customerid, 
  MIN(order_date) 
from product_orders 
  where status = 'Active' 
  GROUP BY customerid
  HAVING COUNT(*) >= 10
  ORDER BY customerid

如果您想要最早的日期,而不管状态如何,您可以对其进行子查询。

代码语言:javascript
复制
select 
  count(*), 
  customerid, 
  (SELECT min(order_date) FROM product_orders WHERE product_orders.customerid = p.customerid) AS FirstDate
from product_orders P 
  where status = 'Active' 
  GROUP BY customerid
  HAVING COUNT(*) >= 10
  ORDER BY customerid
票数 1
EN

Stack Overflow用户

发布于 2010-04-29 09:36:27

此查询应为每个具有10个或更多活动订单的客户提供活动订单总数。它还将显示第一个活动订单日期。

代码语言:javascript
复制
Select  Count(OrderId) as TotalOrders,
        CustomerId,
        Min(Transaction_Date) as FirstActiveOrder

From Product_Orders
Where [Status] = 'Active'
Group By CustomerId
Having Count(OrderId)>10
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2736158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档