1

我的表结构

id     name 

1      bhagi
1      user
1      amit
1      sumit
2      bhagi
2      chinmay
2      sumit
3      rashmi
3      RBS
4      sumit
4      amit
4      bhagi
4      rashmi
4      RBS

我要结果

id     name     result

1      bhagi    1/4(position of bhagi for id 1(1) / no of time that id is present(4))
1      user     2/4
1      amit     3/4
2      bhagi    1/3
2      chinmay  2/3
3      rashmi   1/2
4      sumit    1/5
4      amit     2/5
4      bhagi    3/5
4      rashmi   4/5

我的要求是获取结果列

示例:对于 ID 1

现在有 4 个 id bhagi、user、amit 和 sumit

对于 bhagi,结果将是 1/4(因为 bhagi 在 db 中的位置是 1,并且存在的 id 1 的编号是 4)对于其他人来说类似

当结果为 1 时我想忽略。

我试过但不知道要计算分母部分。表示 id 出现的次数。

[编辑]

我努力了

 select id,
   name,
   IF(@LAST=(@LAST:=id), @CURROW := @CURROW + 1, @CURROW:=1) AS ROW_NUMBER
 FROM FEEDBACK_STORE 
 JOIN (SELECT @CURROW := 0, @LAST:=0) R

它的给出结果

id    name   row_number

1     bhagi    1
1     user     2
1     amit     3
1     sumit    4
2     bhagi    1
2     chinmay  2
2     sumit    3
3     rashmi   1
3     RBS      2
4     sumit    1
4     amit     2
4     bhagi    3
4     rashmi   4
4     RBS      5

我只需要分母部分的 id 例如:对于 id 1-4 ,对于 id 2-3,对于 id 3-2,对于 id 4-5

[/编辑]

请帮忙

提前致谢

4

1 回答 1

2

您可以使用子查询来计算具有相同 id 和较小或相等名称的行数:

select  t1.id
,       t1.name
,       concat(
        (
        select  count(*)
        from    Table1 t2
        where   t1.id = t2.id
                and t2.name <= t1.name
        ), '/', total.cnt)
from    Table1 t1
join    (
        select   id
        ,        count(*) as cnt
        from     Table1
        group by
                 id
        ) as total
on      t1.id = total.id
order by
        t1.id
,       t1.name

SQL Fiddle 上的实时示例。

或者,使用更快但更脏的变量技巧:

select  t1.id
,       t1.name
,       concat(
            if(@last=(@last:=t1.id), @cur:=@cur+1, @cur:=1),
            '/',
            total.cnt)
from    Table1 t1
join    (
        select @cur := 0, @last:=0
        ) r
join    (
        select   id
        ,        count(*) as cnt
        from     Table1
        group by
                 id
        ) as total
on      t1.id = total.id

同样在 SQL Fiddle。

于 2013-01-07T13:49:02.443 回答