Ранжирование всех столбцов в таблице / представлении - PullRequest
0 голосов
/ 09 марта 2020

Есть ли эффективный способ ранжировать все столбцы в таблице / представлении. У меня есть sqlite3 база данных статистики хоккейной команды за разные годы. Основное приложение вызывает базу данных и будет выполнять запросы в зависимости от определенного сезона. В некоторых случаях мне нужно ранжировать эти данные, чтобы пользователь мог сравнивать команды.

Мне хорошо известна функция RANK(), предусмотренная в версии sqlite3> 3.25. Мое текущее решение просто включает в себя создание запроса на основе:

SELECT wins, RANK() OVER (ORDER BY wins DESC) AS wins_rank, ... 20 more columns
FROM table;

Есть ли лучший способ структурировать запрос, кроме ввода RANK() OVER (ORDER BY col) AS col_rank для каждого столбца?

Это Также следует отметить, что в течение сезона статистические ранги будут меняться, поэтому я решил не создавать в таблице отдельные столбцы «рангов».

1 Ответ

0 голосов
/ 09 марта 2020

Лучше всего изменить структуру данных. Вы можете хранить данные по одной строке на каждое «значение», например:

  • team_id
  • statistic
  • value

Тогда вы можете использовать:

select team_id, statistics,
       rank() over (partition by team_id, statistic order by value desc) as ranking
from team_statistics;

Конечно, результаты будут в отдельных строках. Чтобы получить их в одну строку, вам нужно будет повернуть данные - и для этого потребуется длинный sh запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...