我有一個名為 的表Users,其中 userId 作為列之一,用戶可以處于給定的 5 種可能狀態中的任何一種(未注冊、已注冊、已訂閱、已訂閱、已取消訂閱)。
我想要一個查詢,它可以為我提供所有經過所有狀態的用戶 ID 的串列。
有人可以幫我解決這個問題。
我也分享了一個示例模式以更好地理解問題
userId state created_at
1 Unregistered 1/10/22
2 Unregistered 4/10/22
3 registered 4/10/22
2 registered 5/10/22
1 registered 7/10/22
1 subscribed 12/10/22
2 subscribed 13/10/22
2 premier 22/10/22
2 unsubscribed 23/10/22
3 unsubscribed 25/10/22
1 unsubscribed 25/10/22
在這里,如您所見,只有 userId = 2 可以是正確答案,因為它正在經歷所有必需的狀態。
uj5u.com熱心網友回復:
一個簡單的計數就可以了。
如果state不知道,您可以使用:
select userId
from Users
group by userId
HAVING COUNT( distinct state ) = (select count(distinct state) from Users);
https://dbfiddle.uk/UEnGQ53k
否則,如果狀態已知:
select userId
from Users
where state in ('Unregistered','registered','subscribed','premier','unsubscribed')
group by userId
HAVING COUNT( distinct state ) = 5;
https://dbfiddle.uk/dBe69rP5
uj5u.com熱心網友回復:
您可以計算每個唯一狀態的數量userid并將其用作過濾器:
SELECT USERID
FROM (
SELECT USERID, COUNT(DISTINCT STATUS) AS N_UNIQUE_STATUS
FROM USERS
GROUP BY USERID
) A
WHERE N_UNIQUE_STATUS = 5
dbfiddle在這里
uj5u.com熱心網友回復:
由于您沒有提及是否可能存在其他可能的狀態或重復,您可以使用計數邏輯
而不是
groupby,我使用了 windows 功能,這樣您就可以看到所有 5 個狀態的每個 id 的所有行和日期with main as ( select *, count(state) over(partition by userid) as total_states_per_userid from users ) select * from main where total_states_per_userid = 5
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/524156.html
標籤:mysqlsql关系划分
上一篇:如何從MySQL中獲取包含SpringBoot中另一個物件值的屬性的物件?
下一篇:同時更新多個值SQL
