>_ IzzyLab

Практическое задание

SQLite: ранжирование через оконную функцию

средне

В базе /root/game.db есть таблица scores(player TEXT, points INTEGER) с результатами игроков. Составь запрос с оконной функцией ROW_NUMBER() (или RANK()), который присвоит каждому игроку место в турнире по убыванию очков, и запиши результат в /root/rank.txt в формате player|место. У игрока с наибольшим числом очков должно быть место 1.

Что потренируешь:
  • оконные функции
  • row_number
  • ранжирование
  • order by
  • sqlite3

Разбор темы

Оконные функции считают значение для каждой строки, «подглядывая» в соседние строки внутри окна, но, в отличие от GROUP BY, не схлопывают набор — строк остаётся столько же. Функции нумерации (ROW_NUMBER(), RANK()) всегда идут в паре с OVER (...), где через ORDER BY задаётся порядок сортировки перед присвоением номеров. Направление сортировки (ASC/DESC) определяет, кому достанется место 1. Утилита sqlite3 по умолчанию разделяет колонки символом |, а вывод легко перенаправить в файл через >.

Что проверяется

  1. лидер получил место 1
  2. аутсайдер получил последнее место

Как это выглядит