带有-ve值的MySQL GROUP_CONCAT

时间:2016-06-15 11:41:25

标签: php mysql

是否可以选择使用大型数据库制作MySQL的Group_Concat函数,这超出了分组结果的限制?

从我的源表中考虑以下示例:

CoursesEntities ctx = new CoursesEntities();

// create 3 lists with relevant data and enters them to db

ctx.Departments.AddRange(departments);
ctx.Courses.AddRange(courses);
ctx.Specializtions.AddRange(specializations);
ctx.SaveChanges();

当我使用GROUP_CONCAT在选择表上查询等级calcultaion时,我得到以下大表:

Id, question, mark
10, 3, -10
10, 4, 0
10, 5, 2
10, 8, 1

我想得到以下内容:

Id, question, mark ,rank
10, 5, 2 ,1
10, 8, 1 ,2
10, 3, -10 ,0
10, 4, 0 ,0

供参考,我的查询如下:

Id, question, mark ,rank
10, 5, 2 ,1
10, 8, 1 ,2
10, 4, 0 ,3
10, 3, -10 ,4

此查询使用少量记录,我的数据库表有32,000行,并且没有显示正确的用户级别。

1 个答案:

答案 0 :(得分:1)

因为"标记"可能会有重复的值。在32447记录和FIND_IN_SET中将找到第一个实例,意味着不需要第2个,第3个等 - 您可以使用GROUP_CONCAT中的DISTINCT省略重复值。

SELECT  *,FIND_IN_SET( mark , (    
    SELECT GROUP_CONCAT( DISTINCT mark 
    ORDER BY mark DESC ) 
    FROM exam_score )
    ) AS rank
    FROM exam_score
    ORDER BY rank asc