簡體   English   中英

沒有分組的SQL計數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM