0

我正在尝试在每个课程上显示最高 3 分,我正在使用以下代码。

SELECT Name, Marks FROM mytable AS t1 
INNER JOIN 
    (SELECT DISTINCT(Marks) AS best_marks FROM mytable WHERE Class='class1' ORDER BY Marks DESC LIMIT 3) AS t2
ON t1.Marka = t2.best_marks ORDER BY Marks DESC, Name ASC;

此代码由 Stackoverfolow 的“Eggplant”提供。

没有类时它会正常工作。

我的表是

Name     Marks     Class
S1       90        class1 
S2       55        class3
S3       60        class4
S4       90        class1
S5       55        class2
S6       60        class3
S7       88        class1    
S8       45        class6  
S9       88        class1
s10      76        class3
s11      92        class3
s12      44        class1   

像上述表格一样,我想显示 3 条记录,包括重复记录和类

所以我的最终输出看起来像

Name     Marks     Class
S1       90        class1 
S4       90        class1
S7       88        class1    
S9       88        class1

Name     Marks     Class
S5       55        class2

Name     Marks     Class
s11      92        class3
s10      76        class3
S6       60        class3


Name     Marks     Class
S3       60        class4

Name     Marks     Class
S8       45        class6  

请帮助我。

4

1 回答 1

1

解决这个问题的方法不止一种。下面将Marks每个类的 distinct 放入一个列表中,并取其中的前三个。然后它将Marks数据中的 与该列表进行比较:

select t1.*
from t1 join
     (select class, substring_index(group_concat(distinct Marks order by Marks desc), ',', 3) as Marks3
      from mytable t1
      group by class
     ) tc
     on t1.class = tc.class and find_in_set(t1.Marks, tc.Marks3) > 0
order by class, Marks desc;
于 2013-07-24T15:18:31.640 回答