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 по ним, в долларах с двумя знаками. Города без завершённых поездок не нужны.
В работе: Отчёт по выручке поверх хранилища, где строка не обновляется, а каждое изменение — новая версия.
Источник: кейс Uber: переход с Postgres на MySQL и Schemaless поверх MySQL, 2016. Условие пересказано своими словами.
Какие запросы вернут выручку по городам по актуальным версиям поездок?
- MAX(ref_key) внутри BASE и оператор ->>
- Город через ->
- ROW_NUMBER и JSON_TABLE
- Все версии BASE без отбора последней
- MAX(ref_key) по всем колонкам