Загрузка данных
-- phpMyAdmin SQL Dump
-- version 5.2.0
-- https://www.phpmyadmin.net/
--
-- Хост: 127.0.0.1:3306
-- Время создания: Апр 19 2026 г., 16:32
-- Версия сервера: 10.4.26-MariaDB
-- Версия PHP: 7.2.34
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
--
-- База данных: `math_work`
--
-- --------------------------------------------------------
--
-- Структура таблицы `routes`
--
CREATE TABLE `routes` (
`id` int(11) NOT NULL,
`origin` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Город отправления',
`destination` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Город назначения',
`distance_km` decimal(8,2) NOT NULL COMMENT 'Расстояние в километрах',
`base_price_per_km` decimal(6,2) NOT NULL COMMENT 'Базовая ставка за 1 км'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
--
-- Дамп данных таблицы `routes`
--
INSERT INTO `routes` (`id`, `origin`, `destination`, `distance_km`, `base_price_per_km`) VALUES
(1, 'Москва', 'Санкт-Петербург', '712.50', '35.50'),
(2, 'Москва', 'Казань', '820.30', '32.00'),
(3, 'Москва', 'Ростов-на-Дону', '1075.80', '28.50'),
(4, 'Санкт-Петербург', 'Казань', '1520.00', '30.00'),
(5, 'Казань', 'Екатеринбург', '950.75', '33.50'),
(6, 'Екатеринбург', 'Новосибирск', '1480.20', '29.00'),
(7, 'Новосибирск', 'Иркутск', '1850.60', '31.50');
-- --------------------------------------------------------
--
-- Структура таблицы `trips`
--
CREATE TABLE `trips` (
`id` int(11) NOT NULL,
`route_id` int(11) NOT NULL,
`truck_number` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Госномер грузовика',
`cargo_weight_kg` decimal(10,2) NOT NULL COMMENT 'Вес груза в кг',
`fuel_consumed_l` decimal(8,2) NOT NULL COMMENT 'Потрачено топлива в литрах',
`trip_date` date NOT NULL,
`driver_bonus_percent` int(11) DEFAULT 0 COMMENT 'Бонус водителю в % от стоимости рейса'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
--
-- Дамп данных таблицы `trips`
--
INSERT INTO `trips` (`id`, `route_id`, `truck_number`, `cargo_weight_kg`, `fuel_consumed_l`, `trip_date`, `driver_bonus_percent`) VALUES
(1, 1, 'А123ВС177', '12500.50', '205.75', '2025-04-10', 5),
(2, 1, 'К456МН77', '8300.00', '195.20', '2025-04-11', 0),
(3, 2, 'О789РХ116', '15200.75', '310.50', '2025-04-10', 7),
(4, 2, 'Т321УВ77', '9800.00', '280.30', '2025-04-12', 0),
(5, 3, 'Е654НК161', '20000.00', '420.00', '2025-04-09', 10),
(6, 3, 'М987ОР77', '17500.25', '405.50', '2025-04-13', 5),
(7, 4, 'С135ТУ78', '22000.00', '580.75', '2025-04-11', 8),
(8, 5, 'В246ХО196', '14500.50', '350.25', '2025-04-14', 0),
(9, 6, 'А579ЕК154', '18000.00', '490.00', '2025-04-12', 12),
(10, 7, 'Р802МС138', '25000.75', '650.50', '2025-04-15', 15),
(11, 1, 'Н111ОО77', '5600.00', '188.90', '2025-04-15', 0),
(12, 3, 'Г222ТТ161', '19100.00', '415.30', '2025-04-16', 5);
--
-- Индексы сохранённых таблиц
--
--
-- Индексы таблицы `routes`
--
ALTER TABLE `routes`
ADD PRIMARY KEY (`id`);
--
-- Индексы таблицы `trips`
--
ALTER TABLE `trips`
ADD PRIMARY KEY (`id`),
ADD KEY `route_id` (`route_id`);
--
-- AUTO_INCREMENT для сохранённых таблиц
--
--
-- AUTO_INCREMENT для таблицы `routes`
--
ALTER TABLE `routes`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=8;
--
-- AUTO_INCREMENT для таблицы `trips`
--
ALTER TABLE `trips`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=13;
--
-- Ограничения внешнего ключа сохраненных таблиц
--
--
-- Ограничения внешнего ключа таблицы `trips`
--
ALTER TABLE `trips`
ADD CONSTRAINT `trips_ibfk_1` FOREIGN KEY (`route_id`) REFERENCES `routes` (`id`);
COMMIT;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
Задания.
1. Задание 1
Выведите список всех рейсов: номер грузовика, вес груза, потраченное топливо.
Добавьте три новые колонки:
o fuel_rounded — топливо, округлённое до целого числа (функция ROUND с 0 знаков).
o fuel_floor — топливо, округлённое вниз до целого (функция FLOOR).
o fuel_ceil — топливо, округлённое вверх до целого (функция CEIL).
2. Задание 2
Выведите номер грузовика, расстояние маршрута (из таблицы routes) и новую
колонку distance_with_one_decimal, в которой расстояние показано с ровно одним
знаком после запятой. Используйте ROUND или TRUNCATE и соединение таблиц
(JOIN).
3. Задание 3
Выведите номер грузовика, вес груза и новую колонку truncated_weight, в которой вес
груза обрезан до целого числа (без округления, просто отброшена дробная часть).
Используйте TRUNCATE.
4. Задание 4
Для каждого рейса вычислите расход топлива на 100 км по формуле: (fuel_consumed_l /
distance_km) * 100. Выведите номер грузовика, расстояние, потраченное топливо, расход
на 100 км (округлите до двух знаков) и абсолютное значение этого расхода
(функция ABS).
5. Задание 5
Для каждого рейса вычислите квадрат расстояния маршрута. Выведите номер грузовика,
расстояние и новую колонку distance_squared. Используйте функцию POW.
6. Задание 6
Для рейсов, у которых вес груза превышает 10000 кг, вычислите квадратный корень из
веса груза. Выведите номер грузовика, вес груза и новую колонку sqrt_weight.
Используйте SQRT. Округлите результат до двух знаков после запятой.
7. Задание 7
Выведите список всех рейсов: номер грузовика, вес груза. Добавьте новую
колонку remainder_1000, которая показывает остаток от деления веса груза на 1000.
Используйте функцию MOD или оператор %.
8. Задание 8
Выведите рейсы, у которых вес груза кратен 500 кг (то есть остаток от деления на 500
равен 0). Используйте MOD в условии WHERE.
9. Задание 9
Для каждого рейса сгенерируйте случайный бонус водителю в процентах от 3 до 18.
Выведите номер грузовика, текущий бонус и новую колонку random_bonus.
Используйте формулу с FLOOR и RAND().
10.Задание 10
Выберите 3 случайных рейса из таблицы trips. Выведите номер грузовика, дату рейса и
вес груза. Используйте ORDER BY RAND() и LIMIT.