查询学习SQL管理员的帮助

查询学习SQL管理员的帮助,sql,Sql,我有一个疑问: SELECT count(*) from ( SELECT custid, count(*) as OrderCount FROM orderinfo WHERE preparedate between '2011-06-01' and '2011-12-31' GROUP by CUSTID ) COUNTDB WHERE Ordercount > '20' 返回:901个客户ID 如果我跑步: SELECT * from ( SELECT custid, count(

我有一个疑问:

SELECT count(*) from
(
SELECT custid, count(*) as OrderCount
FROM orderinfo
WHERE preparedate between '2011-06-01' and '2011-12-31'
GROUP by CUSTID
) COUNTDB
WHERE Ordercount > '20'
返回:901个客户ID

如果我跑步:

SELECT * from
(
SELECT custid, count(*) as OrderCount
FROM orderinfo
WHERE preparedate between '2011-06-01' and '2011-12-31'
GROUP by CUSTID
) COUNTDB
WHERE Ordercount > '20'
它返回单个客户ID及其订单计数的列表

custid OrderCount
1001   24
1010   30
1033   36

我希望做的是查看查询返回的客户ID中有多少已在较晚的日期范围内下单,例如“2012-06-01”和“2012-12-31”

我的目标是:


让我看看是否可以用另一种方式来描述


我需要查看2011年下了20多个订单的CustID的总数(提供的日期范围)。然后,第二步是查看这些客户中有多少人在2012年同一天的日期范围内下了订单

我假设您的模式如下所示:

OrderInfo ( CustId, PrepareDate )
(嗯,简单,嗯?)

因此,如果我理解正确的话,您需要在两个日期之间下了订单并且下了20多个订单的客户列表。这很简单:

SELECT
    CustId,
    Count(*) AS OrderCount
FROM
    OrderInfo
WHERE
    PrepareDate BETWEEN '2012-06-01' and '2012-12-31'
GROUP BY
    CustId
HAVING
    OrderCount > 20

也许像这样的工作:

SELECT
   custid
FROM
   orderinfo
WHERE
     preparedate between '2011-06-01' and '2011-12-31'
 AND custid IN (
       SELECT
          custid
       FROM
          orderinfo
       WHERE
            preparedate between '2011-06-01' and '2011-12-31'
       GROUP BY
          custid
       HAVING
          COUNT(*) > 20
 )

让我看看是否可以用另一种方式来描述。我要看看总数 2011年下了20多个订单的客户数量 (提供日期范围)。然后,第二步是看看有多少 这些客户中的大多数已在2012年的日期范围内下单 同日@AlexandreP.Levasseur

请试试这个。此外,如果您可以制作一个SQLFIDLE,让我们在尝试帮助您时测试查询,这将非常方便

SELECT
    CustId
FROM
    OrderInfo
WHERE
    PrepareDate BETWEEN '2012-06-01' and '2012-12-31' AND
    CustId IN 
        (SELECT
            DISTINCT CustId
        FROM
            OrderInfo
        WHERE
            PrepareDate BETWEEN '2011-06-01' and '2011-12-31'
        GROUP BY
            CustId
        HAVING
            Count(*) > 20)

您不应在日期之间使用。对这是因为此查询中的操作顺序是FROM、WHERE、groupby、SELECT和HAVING。在WHERE表达式中,别名
OrderCount
尚不为人所知,因此无法按您的要求应用它。让我看看是否可以用另一种方式来描述它。我需要查看2011年下了20多个订单的CustID的总数(提供的日期范围)。然后,第二步是,如果我改为选择计数(不同的客户ID),而不是报告在2011年下了20多个订单的697个客户ID,以及在2012年至少下了一个订单,那么查看这些客户中有多少人在2012年的同一日期范围内下了订单@AlexandreP.LevasseurSo,对吗?如果是这样的话,我的号码看起来不错,我知道了!