![](/img/trans.png)
[英]Count occurrences of character in a string and Group By with SQL without group_concat
[英]SQL count without group by
我有一個具有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;
但是它只給我提供了購買次數超過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
像這樣更改您的最后一個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;
SELECT *
FROM MYTABLE
WHERE USER_ID IN (SELECT USER_ID
FROM MYTABLE
GROUP BY USER_ID
HAVING COUNT(*)>=2)
我在netezza中測試過,它可以正常工作。 希望它也在mysql中工作
嘗試使用具有評論的GROUP BY。
SELECT user_Id, purchase_id
FROM mytable
GROUP BY user_Id
HAVING count( * ) >5
據我所知,您要列出所有購買次數超過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的客戶。
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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.