首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >统计在多个站点上订购的用户的订单数

统计在多个站点上订购的用户的订单数
EN

Stack Overflow用户
提问于 2012-07-17 00:55:27
回答 2查看 68关注 0票数 2

我有一个订单表,存储来自我们公司内多个站点的订单。在该表中,我们有字段userid、ordernumber和sitename。我希望能够得到的是从我们的2个或更多的网站订购的用户数量。

这是我开始时的想法:

代码语言:javascript
复制
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;

这并不接近正确,但这是我所能想到的最接近的结果。任何帮助或指导都将非常感谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-17 00:59:17

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

代码语言:javascript
复制
SELECT
  o.userbid,
  COUNT(DISTINCT o.sitename) AS num_order_sites
FROM
  orders o
GROUP BY o.userbid
HAVING COUNT(DISTINCT o.sitename) >= 2
票数 4
EN

Stack Overflow用户

发布于 2012-07-17 00:59:15

如果你只是寻找那些从多个网站订购的用户,你实际上不需要做self join。你只是需要这个。

代码语言:javascript
复制
SELECT
  o.userdbid
FROM
  orders o
GROUP BY o.userdbid
HAVING 
    COUNT(o.sitename) > 1

如果你想找到更多的信息,你可以重新加入这些结果。

例如:

代码语言:javascript
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11508941

复制
相关文章

相似问题

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