2015-05-14 146 views
-1

我需要的結果集是這樣的:MySql:高級排序第一行到最高然後從最低到最高?

First Last Amount 
Bob Nolan 789 
Bob Nolan 0 
Bob Nolan 23 
Bob Nolan 55 
Mavis Li 3030 
Mavis Li 0 
Mavis Li 213 
Mavis Li 449 

的人的第一個記錄應始終給我的最高金額,則第二等等應該給我從最低到最高。

我該如何分類?

感謝

+1

如果您有2條記錄具有相同的最大值,該怎麼辦?例如2個記錄與'Bob Nolan 789'? – Alex

+0

您可否詳細說明要求?我不明白Bob Nolans是如何排序的。 – Mureinik

+0

嗨@alex在我們的系統中是不可能的。該人的第一個記錄實際上是他們的工資總額。第二等實際上是他們從這些工資總額中支付的稅款。 該人的第一個記錄始終具有最高的最大值。第二,第三,第四,第五個人的記錄總是從最低到最高。 –

回答

3

從您的評論:

人的第一條記錄實際上是他們的工資總額。第二個 等實際上是他們從這些毛額 工資支付的稅。

爲什麼不爲該交易類型添加一列,然後在您的排序中使用該列?

更新 - 獻給亞歷

爲了讓我的回答更加 「answery」,查詢將是這樣的:

select * 
    from yourTable 
    order by 
    firstName, 
    lastName, 
    IF(transactionType='grossWages', 0, 1), 
    amount; 
+0

即使我喜歡你的評論,它仍然是評論 - 不是一個答案,對不起朋友:-) – Alex

+0

@alex回答更新和致力於你;) – Briguy37

+0

:-)現在好多了, – Alex

3

如果你絕對不能改變結構...

SELECT t1.* 
    FROM table t1 
    JOIN (
     SELECT first, last, MAX(amount) max 
     FROM table 
    GROUP BY first, last 
     ) t2 
     ON t2.first = t1.first 
    AND t2.last = t1.last 
ORDER BY t1.first, 
     t2.last, 
     t1.amount = t2.max DESC, 
     t1.amount  

我會認真考慮添加一列來顯示交易類型。

另外,稅收也可能是負面交易,所以在這些前面的負號可以讓您ORDER BY first, last, amount DESC

1

請相應地更改表名稱。

select * from so_30240116 a where 
a.amount=(
select max(b.amount) from so_30240116 b 
where a.first=b.first and a.last=b.last group by b.first, b.last 
) 
union 
select * from so_30240116 a where 
a.amount!=(
select max(b.amount) from so_30240116 b 
where a.first=b.first and a.last=b.last group by b.first, b.last 
) 
order by first,last