mysql - 选择获取mysql中的数据

标签 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

我的需求是获取结果列

示例:对于 ID 1

有 4 个 id present 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

[/编辑]

请帮忙

提前致谢

最佳答案

您可以使用子查询来计算具有相同 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.

关于mysql - 选择获取mysql中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14197018/

相关文章:

mysql - 使用 mysql 显示带有日期值的 **开始或结束错误消息**

SQL - 在给定特定 WHERE 子句的情况下查找下一行和上一行

java - 根据复杂的逻辑更新列表

c# - 这个按位表达式有更好的逻辑吗?

PHP 逻辑数组和旧变量与新变量

mysql - 从三个表中选择一个值

mysql - 这张 table 如何设计比较好呢?

mysql - 将表从一个 MySQL 数据库插入到另一个 - 操作数应包含 1 列

php - 定期将数据内容复制到 MySQL 表中的最优雅的方法是什么?

MYSQL if (string in ( 0) ) 返回 TRUE