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

MySql:高级排序第一行到最高,然后从最低到最高?,mysql,sorting,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 这个人的第一个记录应该总是给我最高的金额,然后第二个记录等等应该给我从最低到最高的金额 我该怎么分类呢 感谢您的评论: 这个人的第一个记录实际上是他们的总工资。第二 以此类推

我需要这样的结果集:

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
这个人的第一个记录应该总是给我最高的金额,然后第二个记录等等应该给我从最低到最高的金额

我该怎么分类呢

感谢您的评论:

这个人的第一个记录实际上是他们的总工资。第二 以此类推,实际上是他们从这些总收入中支付的税款 工资

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

更新-献给Alex

为了让我的答案更为明确,问题如下:

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    
<>我会认真考虑添加一个列来显示事务类型。


作为旁白。。税收可能也是负交易,因此在这些交易前加上减号可以让您按第一、最后、金额说明进行订购。

请相应地更改表名

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

如果有两条记录的最大值相同,该怎么办?例如,Bob Nolan 789的2条记录?您能详细说明这些要求吗?我不明白鲍勃·诺兰是怎么分类的。嗨,亚历克斯,这在我们的系统里是不可能的。这个人的第一个记录实际上是他们的总工资。第二个等等实际上是他们从这些总工资中支付的税款。此人的第一条记录将始终具有最高的最大值。第二、第三、第四、第五个人的记录总是从最低到最高。你有什么东西可以添加到识别工资总额记录的结果集中吗?很好,那么你的问题是什么?如果你知道fufture中的数据是什么-那么你的问题是什么?即使我喜欢你的评论,它仍然是评论-不是答案,对不起,朋友:-你能相信吗?最后,他选择了你的答案而不是评论:-对不起,你的两个答案都是正确的,我只能选择一个:你可以做另一件事-清楚地问你真正需要什么,并在下一次发布更多细节,如:表模式、原始数据样本等:-@Arth-我在回答问题时对你的答案投了更高的票。但是,出于性能原因,我仍然更喜欢此解决方案,特别是如果您有/可能有一个合乎逻辑的列: