我有一个订单表,用于存储公司内多个站点的订单。在表中,我们有字段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;
这并不接近正确,但这和我想的一样接近。任何帮助或指示都将非常感激。
答案 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