2016-06-28 118 views
0

我有一个具有user_id和purchase_id的表。我想过滤表格,以便只有超过2次购买的用户(即表格中该用户的行数超过2行)。我用count和group by,但它不能以我想要的方式工作。无计数的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; 

但它给我只有用户(只有一个user_id)有超过2购买,它不会给我所有的购买。例如,如果表是这样的:

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

'user_Id,purchase_id,count(*)'如果您使用GROUP BY,建议不要添加除您索引的列以外的任何其他列,并且我的功能 –

+0

不明白为什么人们会低估我的问题。这是我的智力水平。我不能比这更聪明,所以这些都是我的问题水平。对不起,如果你比我聪明。如果对你来说这不是一个高级别的问题,只要忽略它,你为什么会失望呢?! – 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

谢谢@Mahesh。它完美的作品。 – HimanAB

0

尝试GROUP BY机智h有评论。

SELECT user_Id, purchase_id 
FROM mytable 
GROUP BY user_Id 
HAVING count(*) >5 
0

据我可以告诉你想列出超过5购买的所有用户的用户ID和购买ID。

为了做到这一点,你可以在两个查询上进行连接。 例如:

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基本上含有所有用户的USER_ID的超过5购买的表。 然后,我们做一个选择(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) 

我在Netezza公司进行测试,它的工作原理。希望它也在mysql中工作