0

我有数据列:

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

我应该运行哪个选择来获得这个结果?

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: ​​名称、类型和编号列是独立的。正如您在结果示例中看到的那样,我需要按类型对其进行排序。

4

2 回答 2

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 小提琴在这里

于 2012-09-06T08:52:29.230 回答
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 排序这个结果,然后按类型排序。

于 2012-09-06T09:14:09.047 回答