如何从18个sql值中选择16个最高值?

li9yvcax  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(335)

好的,我把它从列改为行;-)
我在为学生们保存分数。我有一个名为“grade”的mysql表,其中有三列名为“subject”、“points”和“userid”,其中18行有不同的主题,每个主题可以有20、17.5、15或12.5中的一个值
因此,所有用户都有相同的“主题”,但可以有不同的“点”

"subject"            "points"   "userId"

svenska              20          23
engelska             15          23
bild                 12.5        23
biologi              15          23
matte                17.5        23
fysik                20          23
historia             12.5        23
hemkunskap           15          23
kemi                 17.5        23
historia             20          23
idrott               12.5        23
moderanspråk         15          23
modersmål            17.5        23
musik                12.5        23
religion             20          23
samhällskunskap      15          23
slöjd                12.5        23
teknik               17.5        23

我需要从18个“受试者”中具有最高值的16个“受试者”中选择值并求和。
我该怎么做?非常感谢您的意见,谢谢。

gwbalxhn

gwbalxhn1#

您可以使用子查询来获取16行,其中点最多:

select sum(points)
from (select g.*
      from grades g
      order by points desc
      limit 16
     ) g;

如果希望每个用户都这样,则可以使用窗口函数:

select userid, sum(points)
from (select g.*,
             row_number() over (partition by userid order by points desc) as seqnum
      from grades g
     ) g
where seqnum <= 16
group by userid
aelbi1ox

aelbi1ox2#

试试这个:

SELECT sum(points) FROM `subjects ` order by points desc limit 0,16

相关问题