2016-06-28 121 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中工作