【发布时间】:2019-01-05 09:09:11
【问题描述】:
我需要按组对数据进行排序。据我所知,这不能通过多个条件使用sort 来实现,而且group 也不是我需要的,因为我不想减少记录,而是在将组保持在一起的同时对它们进行排序。看以下数据:
Group Data1 Data2
a 1 5
a 2 4
a 3 7
a 4 6
b 1 9
b 2 2
b 3 1
b 4 13
c 1 8
c 2 10
c 3 13
c 4 12
我希望这些组保持在一起,然后按 Data2 desc 排序,然后按 Data1 desc 排序。为了使它们保持在一起,任何组的第一条记录之后跟在同一组的其余记录之后,以相同的方式排序。考虑一下,该组按max Data2 desc,max Data1 desc 排序,而不是按字母顺序。
Group Data1 Data2
b 4 13
b 1 9
b 2 2
b 3 1
c 3 13
c 4 12
c 2 10
c 1 8
a 3 7
a 4 6
a 1 5
a 2 4
我可以用 SQL 来实现吗?
在其他环境中,我可以定义一个比较器,然后简单地按 Group、Data2、Data1 排序。
【问题讨论】:
-
"现在我希望这些组保持在一起,然后按 Data2 desc 和 Data1 desc 排序,因此结果应该是:" 为什么组 b、c 和 a 的顺序为什么不是 a、b , c 例如?..您使用哪个 MySQL 版本?
SELECT VERSION();除了在列名中使用增量看起来很可疑,而且是规范化的绝佳候选者。 -
如果您对组订购没有特殊要求,例如我问“为什么组 b、c 和 a 组为什么不是 a、b、c”.. 你可以简单地做使用
ORDER BY test.group ASC , test.Data2 DESC , test.Data1 DESC -
我同意 Raymond Nijland 的观点,所提供的信息并不充分 - 请说明您对 a 列的要求,除此之外它应该保持一致。
-
仍有待解决的问题...您是否希望 b 成为第一组,因为它的 data2 值 (13) 和 c 也是最高的?
-
@MichaelTiefenbacher
b按Data2 desc, Data1 desc排序时的最高记录 - b 有 (13, 4),c 有 (13, 3)