2017-03-09 10 views
1

私はこのクエリを持っている:DISTINCTの結果をグループ化し、COUNT行を正しくグループ化する方法はありますか?

SELECT DISTINCT w.buyer_id, u.username, a.cb_id 
FROM winners AS w 
INNER JOIN auctions AS a ON w.auction_id=a.auction_id AND a.cb_id > 0 AND a.category_id=1922 
INNER JOIN users AS u ON w.buyer_id=u.user_id 

だから基本的に私は、各w.buyer_ida.cb_idに関してに携わってきましたどのように多くのユニークエントリを見つけるためにしようとしています。

これを行うには、上記のクエリを実行し、すべての一意の値を表示するので、良い行結果を取得します。そのユーザーには14行(14個の固有のCB IDが含まれています)があり、ユーザーBには5行が含まれていることがわかります。私は以下試した

w.buyer_id,u.username,count 

だから私はそれは私がの出力を持つレコードセットを取得することができますようにしたい

SELECT DISTINCT w.buyer_id, u.username, a.cb_id, COUNT(*) AS unique_spots 
FROM winners AS w 
INNER JOIN auctions AS a ON w.auction_id=a.auction_id AND a.cb_id > 0 AND a.category_id=1922 
INNER JOIN users AS u ON w.buyer_id=u.user_id 
GROUP BY w.buyer_id 
LIMIT 5000; 

を...しかし、それはCOUNTとしてを返します。私がレコードセットにDISTINCTを適用していない場合でも。

私はここで間違っていますか?

+0

あなたが "間違った" 結果がシンプルになってしまう理由: 'DISTINCT'が処理されます** ** GROUP BYの後** – dnoeth

+0

@dnoethああ、意味がある。ありがとう! – Brett

答えて

2

直接質問を書いて、直接何をしたいのですか?

SELECT w.buyer_id, COUNT(DISTINCT a.cb_id) 
FROM winners w INNER JOIN 
    auctions a 
    ON w.auction_id = a.auction_id AND a.cb_id > 0 AND 
     a.category_id = 1922 INNER JOIN 
    users u ON w.buyer_id = u.user_id 
GROUP BY w.buyer_id; 

usersに参加するには、余計なようだ:

SELECT w.buyer_id, COUNT(DISTINCT a.cb_id) 
FROM winners w INNER JOIN 
    auctions a 
    ON w.auction_id = a.auction_id AND a.cb_id > 0 AND 
     a.category_id = 1922 
GROUP BY w.buyer_id; 
+0

ありがとうございました!私はあなたが 'COUNT'の中で' DISTINCT'を使うことができることを忘れています......そして出力にユーザー名が必要なので、それはそこにあります:) – Brett

2

あなたはこのを試してみました:

SELECT w.buyer_id, u.username, a.cb_id, COUNT(*) AS unique_spots 
FROM winners AS w 
INNER JOIN auctions AS a ON w.auction_id=a.auction_id AND a.cb_id > 0 AND a.category_id=1922 
INNER JOIN users AS u ON w.buyer_id=u.user_id 
GROUP BY w.buyer_id, u.username, a.cb_id 
LIMIT 5000; 
+0

Naa、各ユーザのユニークな 'a.cb_id'の量ではなく、' a.cb_id'を使用します。 – Brett

関連する問題