我的表结构
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
[/编辑]
请帮忙
提前致谢
答案 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
或者,用更快但更脏的变量技巧:
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