计算在多个站点上订购的用户的订单数量

时间:2012-07-16 16:55:27

标签: sql sql-server

我有一个订单表,用于存储公司内多个站点的订单。在表中,我们有字段userid,ordernumber和sitename。我希望能够获得的是从我们两个或更多网站中选出的用户数量。

这就是我的开始:

SELECT
  o.ordernumber,
  o.sitename,
  o.userdbid,
  o2.sitename,
  o2.userdbid,
  o2.ordernumber
FROM
  orders o
INNER JOIN
  orders o2
ON
  o.userdbid = o2.userdbid
WHERE
  o.sitename != o2.sitename
ORDER BY
  o.userdbid;

这并不接近正确,但这和我想的一样接近。任何帮助或指示都将非常感激。

2 个答案:

答案 0 :(得分:4)

您需要HAVING子句来将汇总COUNT()与2进行比较,其中您已按userbid进行分组。请确保在汇总DISTINCT中使用COUNT(),这样您就可以获得多个网站,而不仅仅是多个订单。

SELECT
  o.userbid,
  COUNT(DISTINCT o.sitename) AS num_order_sites
FROM
  orders o
GROUP BY o.userbid
HAVING COUNT(DISTINCT o.sitename) >= 2

答案 1 :(得分:1)

如果您只是寻找从多个网站订购的用户,那么您实际上并不需要进行自我加入。你只需要这个。

SELECT
  o.userdbid
FROM
  orders o
GROUP BY o.userdbid
HAVING 
    COUNT(o.sitename) > 1

如果您想查找其他信息,可以加入这些结果。

e.g。

SELECT 
     o.ordernumber,
     o.sitename,
     o.userdbid
FROM   orders o 
   INNER JOIN (SELECT o.userdbid 
               FROM   orders o 
               GROUP  BY o.userdbid 
               HAVING Count( DISTINCT o.sitename) > 1) morethanOne 
           ON o.userdbid = morethanone.o.userdbid 

更新:请注意关于DISTINCT的注释Michael's point

DEMO