选择在mysql中获取数据

时间:2013-01-07 13:31:34

标签: mysql sql logic

我的表结构

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

我的要求是获取结果列

示例:for Id 1

有一个re 4 id存在bhagi,user,amit和sumit

对于bhagi,结果将是1/4(因为数据库中bhagi的位置为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

[/编辑]

请帮忙

提前致谢

1 个答案:

答案 0 :(得分: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

Live example at 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

Also at SQL Fiddle.