使用非窗口函数的MAX RANK

时间:2018-11-26 21:52:35

标签: database relational-database rank standard-sql

实际的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

0 个答案:

没有答案