MySql:高级排序第1行到最高然后从最低到最高?

时间:2015-05-14 14:37:22

标签: mysql sorting

我需要这样的结果集:

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

这个人的第一个记录应该总是给我最高的金额,然后第二个等等应该给我从最低到最高。

我该如何排序?

由于

3 个答案:

答案 0 :(得分:3)

来自你的评论:

  

该人的第一记录实际上是他们的总工资。第二个   实际上是他们从那些总额中支付的税款   工资。

为什么不为事务类型添加一列,然后在排序中使用该列?

更新 - 致力于Alex

为了让我的回答更多,回答",查询将是这样的:

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

答案 1 :(得分: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

答案 2 :(得分: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