create table users (
id_user int primary key auto_increment,
name varchar(100),
age int
);
create table movies (
id_movie int primary key auto_increment,
title varchar(100),
genre varchar(50),
duration int
);
create table ratings (
id_rating int primary key auto_increment,
id_user int,
id_movie int,
score int,
foreign key (id_user) references users(id_user),
foreign key (id_movie) references movies(id_movie)
);
create table views (
id_view int primary key auto_increment,
id_user int,
id_movie int,
view_date date,
watch_time int,
foreign key (id_user) references users(id_user),
foreign key (id_movie) references movies(id_movie)
);
create table subscriptions (
id_sub int primary key auto_increment,
id_user int,
type varchar(50),
price decimal(8,2),
start_date date,
status varchar(45),
date_of_last_renewal timestamp,
foreign key (id_user) references users(id_user)
);
insert into users (name, age) values
('иван петров', 25),
('анна смирнова', 30),
('сергей кузнецов', 22),
('мария иванова', 28),
('дмитрий соколов', 35);
insert into movies (title, genre, duration) values
('интерстеллар', 'фантастика', 169),
('зеленая миля', 'драма', 189),
('матрица', 'фантастика', 136),
('гладиатор', 'боевик', 155),
('король лев', 'мультфильм', 88);
insert into ratings (id_user, id_movie, score) values
(1, 1, 9),
(1, 3, 8),
(2, 2, 10),
(3, 4, 7),
(4, 5, 9),
(5, 1, 8);
insert into views (id_user, id_movie, view_date, watch_time) values
(1, 1, '2026-01-10', 169),
(1, 3, '2026-02-15', 136),
(2, 2, '2026-01-20', 189),
(3, 4, '2026-03-01', 155),
(4, 5, '2026-03-05', 88),
(5, 1, '2026-04-01', 169);
insert into subscriptions (id_user, type, price, start_date, status, date_of_last_renewal) values
(1, 'премиум', 599.00, '2026-01-01', 'активна', '2026-05-01 10:00:00'),
(1, 'базовая', 199.00, '2025-06-01', 'завершена', '2025-12-01 10:00:00'),
(2, 'премиум', 599.00, '2026-02-01', 'активна', '2026-05-01 10:00:00'),
(3, 'базовая', 199.00, '2026-03-01', 'активна', '2026-05-01 10:00:00'),
(4, 'премиум', 599.00, '2025-11-01', 'активна', '2026-05-01 10:00:00'),
(5, 'базовая', 199.00, '2026-01-15', 'завершена', '2026-04-15 10:00:00');
drop function if exists get_total_subscriptions;
delimiter $$
create function get_total_subscriptions(p_id_user int)
returns decimal(10,2)
deterministic
reads sql data
begin
declare total decimal(10,2);
select coalesce(sum(price), 0)
into total
from subscriptions
where id_user = p_id_user;
return total;
end$$
delimiter ;
drop procedure if exists fill_user_income;
delimiter $$
create procedure fill_user_income()
begin
drop table if exists user_income;
create table user_income (
id_user int primary key,
spent_amount decimal(10,2)
);
insert into user_income (id_user, spent_amount)
select id_user, get_total_subscriptions(id_user)
from users;
select *
from user_income
order by spent_amount desc;
end$$
delimiter ;
call fill_user_income();