Обновите столбец, используя порядок запроса выбора по убыванию наибольшего значения

0

Im возвращает набор записей из таблицы, упорядочивая самую высокую отметку.

Select name,score from score_tbl order by score desc

Теперь то, что я хочу сделать, это то, что на score_tbl есть столбец с именем position который я хочу использовать оператор update для обновления этого столбца на основе запроса select, чтобы позиция обновлялась на основе оценки пользователей

Теги:

1 ответ

0

Похоже, вы хотите обновить значение "position" для всех строк в вашей таблице на основе поля "score". Другими словами, строка с наивысшим результатом получает значение позиции 1. Попробуйте следующее:

UPDATE score_tbl
FROM (
  SELECT name, RANK() OVER(ORDER BY score DESC) ScorePosition
  FROM score_tbl
) src
SET position = src.ScoreRank
WHERE name = src.name

Для этого используется таблица "src", в которой вы создаете ранжирование для обновления целевой таблицы. Это предполагает, что "имя" - это ПК для вашей таблицы.

Не знаете, что такое ваша БД, поэтому вам, вероятно, придется немного настроить запрос. Но это должно заставить вас идти. Дайте мне знать, как это происходит.

обновленный
Попробуйте выполнить запрос ниже:

UPDATE competitors 
INNER JOIN ( 
    SELECT 
        id, 
        RANK() OVER w AS 'ScorePosition' 
    FROM competitors 
    WINDOW w AS (ORDER BY score DESC)
) src ON competitors.id = src.id
SET position = src.ScorePosition;

Похоже, что функции Windows были введены в MySQL 8.0, поэтому вам нужен доступ к этой версии. У меня нет доступа к этой версии, поэтому я не смог проверить. Но дайте мне знать, если это сработает.

Кроме того, посмотрите на этот пост для некоторой помощи:

Как я могу ОБНОВИТЬ из SELECT в SQL Server?

  • 0
    я получаю ошибку. позвольте мне вставить здесь мой реальный запрос, как я изменил рядом с вашим кодом: ОБНОВИТЬ конкурентов ОТ (ВЫБЕРИТЕ имя пользователя, ВЫБЕРИТЕ) (ПЕРЕВЕРНУТЬСЯ ПО ЗАКАЗУ DESC) ScorePosition ОТ конкурентов) src SET position = src.ScoreRank WHERE id = src.id
  • 0
    Можете ли вы вставить точное сообщение об ошибке?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню