原始表:作业
| Amount | Name |
3 Raj
1 Nish
15 Nish
10 Nish
8 Krish
22 Rahul
5 Raj
50 Raj
必填结果格式
| Amount | Name |
50 Raj
5 Raj
3 Raj
22 Rahul
15 Nish
10 Nish
1 Nish
8 Krish
我申请的逻辑是对金额列进行排序并获得最大金额,即(50)并得到 该人的另一笔交易(Raj)并继续搜索第二个最大项目,不包括已选择的人员详细信息(不包括Raj)。
请帮我解决这个问题
我首先通过“Amt”然后按“名称”尝试订单,但它不会按预期产生结果
答案 0 :(得分:4)
此声明将为每个名称指定其最大金额。
select name, max(amount) as max_amt
from jobs
group by name
order by max_amt desc;
Raj 50
Nish 25
Rahul 22
Krish 8
max_amt desc
上的排序为我们提供了正确顺序的群组。现在我们需要做的就是将它连接到“jobs”表,并按两个数字列对结果进行排序。
我使用CTE简化了一些事情。
with max_amounts as (
select name, max(amount) as max_amt
from jobs
group by name
)
select t1.*, t2.max_amt from jobs t1
inner join max_amounts t2
on t2.name = t1.name
order by max_amt desc, amount desc;
在标准SQL中,我认为你可以从外部SELECT子句中删除max_amt,仍然使用order by max_amt desc
。
答案 1 :(得分:3)
create table SORT_AMT_NAME(AMOUNT INT,NAME VARCHAR(20))
INSERT INTO SORT_AMT_NAME Values (22,'Rahul')
INSERT INTO SORT_AMT_NAME Values (8,'Krish')
INSERT INTO SORT_AMT_NAME Values (15,'Nish')
INSERT INTO SORT_AMT_NAME Values (1,'Nish')
INSERT INTO SORT_AMT_NAME Values (10,'Nish')
INSERT INTO SORT_AMT_NAME Values (50,'Raj')
INSERT INTO SORT_AMT_NAME Values (3,'Raj')
INSERT INTO SORT_AMT_NAME Values (5,'Raj')
INSERT INTO SORT_AMT_NAME Values (25,'GS')
SELECT AMOUNT,SORT_AMT_NAME.NAME FROM SORT_AMT_NAME,
(
select MAX(AMOUNT) AS MAX_AMT,NAME,ROW_NUMBER() over (order by MAX(AMOUNT) desc) as Amount_Order
from SORT_AMT_NAME
GROUP BY NAME) x
WHERE X.NAME=SORT_AMT_NAME.nAME
ORDER BY Amount_Order ASC ,AMOUNT DESC,SORT_AMT_NAME.NAME