如何使用迭代对(非标准)mysql数据进行排序?

时间:2012-09-06 08:37:18

标签: mysql

我有数据列:

id  name  type  number
 1   n1    t1    num1
 2   n2    t1    num2
 3   n3    t1    num3
 4   n10   t1    num10

 5   n4    t2    num4
 6   n5    t2    num5
 7   n6    t2    num6

 8   n7    t3    num7
 9   n8    t3    num8
 10  n9    t3    num9

哪个选择我shuld跑来获得这个结果?

id  name  type  number
 1   n1    t1    num1
 5   n4    t2    num4
 8   n7    t3    num7

 2   n2    t1    num2
 6   n5    t2    num5
 9   n8    t3    num8

 3   n3    t1    num3
 7   n6    t2    num6
 10  n9    t3    num9

 4   n10   t1    num10

我想这可能是使用过程执行此操作的正确方法,但是可以在简单查询中对其进行排序吗?

UPDATE1: 名称,类型和数字列是独立的。我需要按结果示例中的类型对其进行排序。

2 个答案:

答案 0 :(得分:4)

  SELECT x.id,x.name,x.type,x.number
  FROM (SELECT t.id,
               t.name,t.type,t.number,
               CASE
                 WHEN @type != t.type THEN @rownum := 0
                 WHEN @type = t.type THEN @rownum := @rownum + 1
                 ELSE @rownum 
               END AS rank,
               @type := t.type
          FROM  scores t,
               (SELECT @rownum := 0, @type)var
      ORDER BY t.type)  x
ORDER BY x.rank, x.type

SQL FIDDLE HERE

答案 1 :(得分:1)

select name, type, number
from (
   select t1.name, t1.type, t1.number, count(*) as typeSubIndex
   from mytable t1
   join mytable t2 on t1.type = t2.type
   where t1.id >= t2.id
   group by t1.name, t1.type, t1.number
) order by typeSubIndex, type

说明: - 在同一类型列上连接自己的表,并使用名为typeSubIndex的额外列,该列是其自己组中每种类型的顺序:

name type number typeSubIndex
n1   t1   num1   1
n2   t1   num2   2
n3   t1   num3   3
n10  t1   num10  4
n4   t2   num4   1
n5   t2   num5   2
n6   t2   num6   3
n7   t3   num7   1
n8   t3   num8   2
n9   t3   num9   3

然后它只是先通过typeSubIndex,然后按类型对此结果进行排序。