Войти Регистрация
Data base

105. Выручка по городам из версионных JSON-ячеек

Сложная

MySQL · MySQL 8.4.6

Uber ушёл с Postgres на MySQL в 2016 году, а поверх MySQL построил Schemaless: данные не обновляются, а дописываются новыми версиями ячейки. Ячейка — это row_key, column_name, ref_key (номер версии) и JSON в body.

Поездка хранится в колонке BASE: {"city": …, "status": …, "fare": …}. Актуальна версия с наибольшим ref_key внутри своей колонки; у других колонок, например RATING, своя нумерация.

Для каждого города верните city, trips — число поездок, у которых в последней версии status = completed, и revenue_usd — сумму fare по ним, в долларах с двумя знаками. Города без завершённых поездок не нужны.

В работе: Отчёт по выручке поверх хранилища, где строка не обновляется, а каждое изменение — новая версия.

Как проверяем Движка MySQL в браузере пока нет, поэтому здесь не запрос, а выбор решения. Выберите все верные варианты (одна лишняя отметка допустима). После ответа — почему каждый вариант верный или нет. Ответ один на подход: после него показываем разбор.
JSONJSON_TABLEтоп-N в группедедупликацияGROUP BY

Источник: кейс Uber: переход с Postgres на MySQL и Schemaless поверх MySQL, 2016. Условие пересказано своими словами.

Давали на собеседовании? Ответов пока мало — ваш поможет.

Какие запросы вернут выручку по городам по актуальным версиям поездок?

  • MAX(ref_key) внутри BASE и оператор ->>
  • Город через ->
  • ROW_NUMBER и JSON_TABLE
  • Все версии BASE без отбора последней
  • MAX(ref_key) по всем колонкам