2

社内の複数のサイトからの注文を格納する注文テーブルがあります。テーブルには、フィールド userid、ordernumber、および sitename があります。取得できるようにしたいのは、2 つ以上のサイトから注文したユーザーの数です。

これは私が始めたものです:

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;

これは正しいとは言えませんが、これは私が考えられる限り近いものです。どんな助けや指示も大歓迎です。

4

2 に答える 2

4

でグループ化した集計を 2HAVINGと比較する句が必要になります。複数の注文だけでなく、複数のサイトを取得できるように、必ず集計で使用してください。COUNT()userbidDISTINCTCOUNT()

SELECT
  o.userbid,
  COUNT(DISTINCT o.sitename) AS num_order_sites
FROM
  orders o
GROUP BY o.userbid
HAVING COUNT(DISTINCT o.sitename) >= 2
于 2012-07-16T16:59:16.870 に答える
1

複数のサイトから注文したユーザーだけを探している場合は、実際に自己参加する必要はありません。これが必要です。

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

追加情報を見つけたい場合は、これらの結果に戻ることができます。

例えば

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に関するマイケルの指摘に注意してください

デモ

于 2012-07-16T16:59:15.063 に答える