我有数据列:
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: 名称,类型和数字列是独立的。我需要按结果示例中的类型对其进行排序。
答案 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
答案 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,然后按类型对此结果进行排序。