我有一个包含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
答案 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;