实际的SQL复杂得多,所以我使用我以前处理该SQL的示例进行简化。
由于某些原因,我无法使用RANK()。
我以此为参考来模拟RANK(对表结构进行了一些修改以适合我的目的):https://www.1keydata.com/sql/sql-rank.html
我想获取销售人员John的ID和最高等级。 SQL必须在没有任何修改的情况下最后将select语句作为子查询包括在内(在我的情况下,ORDER BY子句是必不可少的,尽管在下面的SQL中这是无关紧要的)。 输出应为
id max_rank
1 4
8 5
7 6
9 7
6 7
5 9
DDL
create table total_sales (id int, name varchar(20), sales int);
insert into total_sales values (1, 'John', 60);
insert into total_sales values (2, 'John', 61);
insert into total_sales values (3, 'John', 62);
insert into total_sales values (4, 'John', 63);
insert into total_sales values (5, 'Jennifer', 15);
insert into total_sales values (6, 'Stella', 20);
insert into total_sales values (7, 'Sophia', 40);
insert into total_sales values (8, 'Greg', 50);
insert into total_sales values (9, 'Jeff', 20);
SQL
SELECT a1.id, a1.Name, a1.Sales, COUNT (a2.Sales) Sales_Rank
FROM Total_Sales a1, Total_Sales a2
WHERE a1.Sales < a2.Sales OR (a1.Sales=a2.Sales AND a1.Name = a2.Name)
GROUP BY a1.id, a1.Name, a1.Sales
ORDER BY sales_rank desc