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

私の要件は、結果列を取得することです

例:Id1の場合

そこにre4id present bhagi、user、amit and 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の場合、id4-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

SQLFiddleでの実例。

または、より速く、しかしより汚い可変トリックで:

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フィドルでも。

于 2013-01-07T13:49:02.443 に答える