根据两个条件返回前100万(SQL查询)



我想构建一个查询,根据对1000万客户进行排名的两个标准返回前100万客户。

标准1是对每个客户从1到5的评分,1是最好的

标准二是给每个客户从a到E的等级,a是最好的

标准1胜过标准2,因为在您移动到B(标准2)之前,您必须首先在A波段(标准2)内从1到5(标准1),即得分为5(标准1)和A(标准2)的客户比得分为1(标准1)和B(标准2)的客户更好。

我希望查询返回前100万个客户,在返回第100万个客户的频带内停止,例如,如果客户100万在4C频带中,则不返回任何超过4C的客户。只要超过100万,就可以满足4C频段的所有客户。这是我的尝试,但这并没有解释顺序:

SELECT *
FROM CUSTOMER_POPULATION 
WHERE Criterion1 IN (5,4,3,2,1)
AND Criterion2 ('A','B','C','D','E')
LIMIT 1000000

TIA。

WITH CUSTOMER_POPULATION (NAME, CRITERION1, CRITERION2) AS
(SELECT * FROM VALUES
('Alice',3,'A'),('Bob',4,'C'),('Carol',5,'E'),('Dave',2,'C')
,('Esther',2,'E'),('Fred',5,'C'),('Gladys',3,'E'),('Harvey',2,'E')
,('Iona',3,'C'),('John',1,'A'),('Kate',4,'E'),('Leo',3,'B')
,('Mary',2,'C'),('Nora',3,'A'),('Oscar',1,'D'),('Penny',3,'C')
,('Quincy',3,'A'),('Ruth',5,'E'),('Sam',4,'B'),('Tina',2,'C')
,('Ulrich',1,'B'),('Velma',5,'B'),('Wayne',2,'C'),('Xena',5,'B')
,('Yale',1,'D'),('Zoe',5,'C')
)
SELECT *
FROM CUSTOMER_POPULATION 
WHERE Criterion1 IN (5,4,3,2,1)
AND Criterion2 IN ('A','B','C','D','E')
ORDER BY CONCAT(Criterion2, Criterion1)
LIMIT 1000000
tbody><爱丽丝昆西山姆戴夫韦恩蒂娜玛丽<鲍勃弗雷德5 C奥斯卡耶鲁大学哈维以斯帖凯特露丝卡罗尔

rank()将让您根据两个标准的顺序对波段进行编号。因为领带得到相同的排名,你不会在恰好第100万行的波段中间切断结果。

with data as (
select *, rank() over (order by Criterion2, Criterion1) as rnk
from CUSTOMER_POPULATION
where Criterion1 IN (5,4,3,2,1) and Criterion2 in ('A','B','C','D','E')
)
select * from data where rnk <= 1000000;

相关内容

  • 没有找到相关文章

最新更新



  • All rights reserved © 2023 www.xiaobeizi.cn

  • 首页
NAMECRITERION1CRITERION2
约翰1
3
诺拉3
3
Ulrich1B
狮子座3B
4道明>
齐娜5B
维尔玛5B
2C
2C
2C
2C
爱奥那岛3C
一分钱/td>3C
4C
佐伊5C
1D
1D
2E
2E
格拉迪斯3E
4E
5E
5E