在我的表中,我有“電子郵件”列。我想選擇 1000 個資料,其中最多 100 封電子郵件是“gmail”。有沒有辦法撰寫一個查詢來獲取資料?
我正在做的是創建兩個查詢然后合并它們。
SELECT email from my_table where email not like '%@gmail.%' limit 900;
SELECT email from my_table where email like '%@gmail.%' limit 100;
uj5u.com熱心網友回復:
一個簡單的union all應該是它。但是,要確保您獲得正好 1000 行(如果有超過 1000 行但少于 100 行是@gmail),您可以這樣做:
with u as
(SELECT email from my_table where email like '%@gmail.%' limit 100)
select * from u
union all
(SELECT email from my_table
where email not like '%@gmail.%'
limit 1000 - (select count(*) from u));
uj5u.com熱心網友回復:
可能會有更好的答案,但可以解決您的問題:
select email
from (
select email,
row_number() over(partition by 1) as rn
from my_table mt
where email not like '%@gmail.%'
)q1
where rn <= 900
union all
select email
from (
select email,
row_number() over(partition by 1) as rn
from my_table mt
where email like '%@gmail.%'
)q1
where rn <= 100
uj5u.com熱心網友回復:
您可以使用 cte 函式將其撰寫為單個查詢:
WITH
query_1 AS
(SELECT email from my_table where email not like '%@gmail.%' limit 900),
query_2 AS
(SELECT email from my_table where email like '%@gmail.%' limit 100)
SELECT email FROM query_1
UNION ALL
SELECT email FROM query_2;
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/444787.html
標籤:sql PostgreSQL
下一篇:如何分組并獲得相同的結果?
