Как выбрать 16 высших значений из 18 значений SQL? - PullRequest
0 голосов
/ 13 июля 2020

Хорошо, поэтому вместо этого я заменил столбцы на строки; -)

Я сохраняю оценки для студентов. У меня есть таблица MySQL под названием «оценка» с тремя столбцами под названием «тема», «баллы» и «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

Мне нужно выбрать и суммировать значения из 16 «субъектов», которые имеют самые высокие значения из 18 "предметов".

Как мне это сделать? Любой вклад очень признателен, спасибо.

Ответы [ 2 ]

0 голосов
/ 13 июля 2020

Попробуйте следующее:

SELECT sum(points) FROM `subjects ` order by points desc limit 0,16
0 голосов
/ 13 июля 2020

Вы можете использовать подзапрос, чтобы получить 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...