SQL按列排序并同时按另一列排序

时间:2014-04-30 18:26:22

标签: sql sorting group-by sql-order-by

原始表:作业

| 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”然后按“名称”尝试订单,但它不会按预期产生结果

2 个答案:

答案 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