Из ваших тегов не ясно, используете ли вы базу данных Oracle или MySQL. Этот ответ предполагает первый.
В вашем вопросе есть несколько пробелов, но кажется, что вы хотите присвоить каждой строке порядковый номер, основанный на drive_mode
и safety_rating
. Вы упоминаете "used_car_id column is equal to the new_car_id
" несколько раз, но никогда не упоминаете, что хотите делать, когда они не равны.
Для написанного вопроса кажется, что это может быть решено довольно простым способом с использованием аналитических функций. В этом случае мы просто скажем функции упорядочить строки по drive_mode_id
и safety_rating
и присвоим каждой строке в результирующем порядке последовательный номер:
SELECT id,
used_car_id,
new_car_id,
car_features_id,
drive_mode_id,
safety_rating,
ROW_NUMBER () OVER (ORDER BY drive_mode, safety_rating)
AS parking_spot
FROM your_table
WHERE used_car_id = new_car_id
Похоже, что MySQL поддерживает аналитические функции (так называемые оконные функции) начиная с 8.0.2, поэтому приведенное выше решение должно работать, если вы используете эту версию или более позднюю (если нет, этот ответ может помочь ).
Чтобы обновить это, чтобы рассматривать used_car_id = new_car_id
как условие сортировки, вам нужно добавить условие в ORDER BY:
SELECT id,
used_car_id,
new_car_id,
car_features_id,
drive_mode_id,
safety_rating,
ROW_NUMBER ()
OVER (
ORDER BY
CASE WHEN used_car_id = new_car_id THEN 1 ELSE 2 END,
drive_mode,
safety_rating)
AS parking_spot
FROM your_table
Это не проверено, поэтому я не могу гарантировать, что это полностью синтаксически правильно, но это должно быть близко.