我想构建一个查询,根据对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