我需要的結果集是這樣的: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
的人的第一個記錄應始終給我的最高金額,則第二等等應該給我從最低到最高。
我該如何分類?
感謝
我需要的結果集是這樣的: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
的人的第一個記錄應始終給我的最高金額,則第二等等應該給我從最低到最高。
我該如何分類?
感謝
從您的評論:
人的第一條記錄實際上是他們的工資總額。第二個 等實際上是他們從這些毛額 工資支付的稅。
爲什麼不爲該交易類型添加一列,然後在您的排序中使用該列?
更新 - 獻給亞歷
爲了讓我的回答更加 「answery」,查詢將是這樣的:
select *
from yourTable
order by
firstName,
lastName,
IF(transactionType='grossWages', 0, 1),
amount;
如果你絕對不能改變結構...
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
。
請相應地更改表名稱。
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
如果您有2條記錄具有相同的最大值,該怎麼辦?例如2個記錄與'Bob Nolan 789'? – Alex
您可否詳細說明要求?我不明白Bob Nolans是如何排序的。 – Mureinik
嗨@alex在我們的系統中是不可能的。該人的第一個記錄實際上是他們的工資總額。第二等實際上是他們從這些工資總額中支付的稅款。 該人的第一個記錄始終具有最高的最大值。第二,第三,第四,第五個人的記錄總是從最低到最高。 –