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-我在回答问题时对你的答案投了更高的票。但是,出于性能原因,我仍然更喜欢此解决方案,特别是如果您有/可能有一个合乎逻辑的列: