没有分组的SQL计数

时间:2016-06-28 17:34:21

标签: mysql sql

我有一个包含user_id和purchase_id的表。我想过滤表格,以便只有购买次数超过2的用户(即表格中该用户的行数超过2行)。我使用了count和group by,但它不能以我想要的方式工作。

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

5 个答案:

答案 0 :(得分: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;

答案 1 :(得分:1)

SELECT * 
FROM MYTABLE
WHERE USER_ID IN (SELECT USER_ID
FROM MYTABLE
GROUP BY USER_ID
HAVING COUNT(*)>=2)

我在我的netezza中测试过,它有效。希望它也在mysql中工作

答案 2 :(得分:0)

使用HAVING评论尝试GROUP BY。

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

答案 3 :(得分: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本质上是一个表,其中包含超过5次购买的所有用户的user_id。 然后我们选择(tblLeft)并在tbl右边加入它,确保只有超过5个购买的客户。

答案 4 :(得分: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;