2016-06-28 16 views
0

私はuser_idとpurchase_idを持つテーブルを持っています。 2回以上購入したユーザー(つまり、そのユーザーの2つ以上の行がテーブルにある)のみが表示されるように、表をフィルタリングします。私は数とグループを使用しましたが、それは私が望む方法では動作しません。グループなしのSQLカウント

create view myview as 
select user_Id, purchase_id, count(*) as count from mytable group by user_Id; 

select user_id, purchase_id from myview where count >2; 

しかし、それは私に2つ以上の購入があり、それは私に彼らの購入のすべてを与えるものではありませんユーザーのみ(一つだけのuser_id)を提供します。

user_id purchase_id 
1   1212 
1   1312 
2   1232 
1   1321 
3   1545 
3   4234 

私のクエリは私にこの提供します:たとえば、テーブルは次のように見える場合

1  1212 
3  1545 

しかし、私はこれ欲しい:

1   1212 
1   1312 
1   1321 
3   1545 
3   4234 
+0

'GROUP BY'を使うなら' user_Id、purchase_id、count(*) '、あなたが索引を付けた列以外の他の列を追加することはお勧めしません。 –

+0

本当に人々がなぜ私の質問を下落させるのか理解していない。これは私の知性のレベルです。私はこれよりも賢明ではないので、これらは私の質問のレベルです。あなたが私よりもスマートな人なら、申し訳ありません。それはあなたのための質問の高レベルではない場合は、それを無視する、なぜあなたはそれをdownvoteですか? – HimanAB

+0

いいえ私はそれをdownvoteしなかった –

答えて

2

変更この

のようなあなたの最後のSQL
select mt.user_id, mt.purchase_id 
from myview mv 
inner join mytable mt 
on mt.user_id=mv.user_id where mv.count >5; 
+0

@ HimanUCSS上記のクエリを試してみてください –

+0

ありがとう@マシェッシュ。それは完全に動作します。 – HimanAB

0

GROUP BY witを試すhコメントあり。

0

あなたが5つ以上の購入を持つすべてのユーザーのユーザーIDと購入IDを表示することができます。

これを行うには、2つのクエリに対して結合を行うことができます。 例えば:

SELECT tblLeft.user_id, 
     tblLeft.purchase_id 
FROM myview tblLeft 
     JOIN (SELECT user_id, 
        Count(*) AS purchases 
      FROM myview 
      GROUP BY user_id 
      HAVING purchases > 1) tblRight 
     ON tblLeft.user_id = tblRight.user_id 

tblRightは、本質的に5以上のお買い物を持つすべてのユーザのUSER_ID年代を含むテーブルです。 次に、select(tblLeft)を実行してtblの権利に参加させ、5以上の購入を持つ顧客のみが残るようにします。

0
SELECT 
    * 
FROM 
    mytable mt, 
    (SELECT user_id, count(*) AS purchase_count FROM mytable GROUP BY user_id) ct 
WHERE 
    mt.user_id = ct.user_id AND ct.purchase_count > 5; 
1
SELECT * 
FROM MYTABLE 
WHERE USER_ID IN (SELECT USER_ID 
FROM MYTABLE 
GROUP BY USER_ID 
HAVING COUNT(*)>=2) 

私はそれが動作しますが、私のネティーザでテストしました。うまくいけば、それはまたmysqlで働いています

関連する問題