SQLize Online / PHPize Online  /  SQLtest Online

A A A
Share      Blog   Popular
Copy Format Clear
/* База данных использует star schema: В качестве таблицы фактов имеет таблицу чеков checks - store_id(integer), card_id(integer), loyality_id(integer), total(integer) В качестве таблиц-справочников: -таблицу магазинов bas_store - store_id(serial), регион(text) и размер('S', 'M', 'L'), -таблицу банковских карт, использовавшихся при оплате - card_id(serial), платежная система('Master', 'Visa', 'Mir'), банк(text), год окончания действия(integer) -таблицу карт лояльности - loyality_id(serial), статус('Silver', 'Bronze', 'Gold'), год выпуска(integer) Чтобы задать количество генерируемых строк в checks, нужно поменять параметр n=500 в generate_series(1, n) */ create table bas_store ( store_id serial primary key, region text not null default 'unknown', size_ text not null default 'unknown'); create table bas_card ( card_id serial primary key, sys text not null default 'unknown', bank text not null default 'unknown', exp_year integer not null default 0 ); create table bas_loyality ( loyality_id serial primary key, status text not null default 'unknown', issue_year integer not null default 0); INSERT INTO bas_store (region, size_) values ('Москва', 'L'), ('Москва', 'M'), ('Московская обл.', 'S'), ('Москва', 'S'), ('Московская обл.', 'S'), ('Самара', 'M'), ('Московская обл.', 'L'), ('Москва', 'L'), ('Москва', 'S'), ('Москва', 'L'), ('Самара', 'L'), ('Московская обл.', 'L'), ('Москва', 'L'), ('Самара', 'S'), ('Москва', 'M'), ('Санкт-Петербург', 'L'), ('Москва', 'M'), ('Москва', 'S'), ('Москва', 'S'), ('Московская обл.', 'S'), ('Самара', 'M'), ('Москва', 'S'), ('Санкт-Петербург', 'M'), ('Москва', 'L'), ('Москва', 'S'), ('Москва', 'M'), ('Самара', 'M'), ('Санкт-Петербург', 'M'), ('Санкт-Петербург', 'S'), ('Москва', 'L'), ('Москва', 'L'), ('Санкт-Петербург', 'L'), ('Московская обл.', 'S'), ('Санкт-Петербург', 'L'), ('Санкт-Петербург', 'S'), ('Московская обл.', 'L'), ('Москва', 'M'), ('Москва', 'M'), ('Москва', 'M'), ('Москва', 'S'), ('Санкт-Петербург', 'M'), ('Москва', 'S'), ('Санкт-Петербург', 'M'), ('Санкт-Петербург', 'M'), ('Санкт-Петербург', 'S'), ('Москва', 'M'), ('Санкт-Петербург', 'S'), ('Московская обл.', 'M'), ('Москва', 'L'), ('Москва', 'S'); INSERT INTO bas_card (sys, bank, exp_year) values ('Master', 'Sber', 2023), ('Mir', 'Sber', '2025'), ('Mir', 'Tinkoff', '2025'), ('Visa', 'Raiffeisen', '2025'), ('Visa', 'Alfa', '2024'), ('Master', 'Alfa', '2025'), ('Visa', 'Sber', '2025'), ('Visa', 'Alfa', '2025'), ('Mir', 'Sber', '2025'), ('Mir', 'Sber', '2023'), ('Mir', 'Tinkoff', '2025'), ('Mir', 'Tinkoff', '2023'), ('Visa', 'Tinkoff', '2023'), ('Mir', 'Alfa', '2023'), ('Mir', 'Sber', '2024'), ('Mir', 'Alfa', '2025'), ('Mir', 'Alfa', '2025'), ('Mir', 'Alfa', '2024'), ('Visa', 'Raiffeisen', '2023'), ('Mir', 'Sber', '2024'), ('Visa', 'Alfa', '2023'), ('Mir', 'Sber', '2023'), ('Visa', 'Tinkoff', '2024'), ('Visa', 'Sber', '2023'), ('Visa', 'Sber', '2025'), ('Mir', 'Alfa', '2025'), ('Visa', 'Sber', '2023'), ('Mir', 'Tinkoff', '2025'), ('Mir', 'Alfa', '2023'), ('Mir', 'Sber', '2024'), ('Master', 'Tinkoff', '2024'), ('Mir', 'Sber', '2025'), ('Master', 'Sber', '2023'), ('Visa', 'Sber', '2025'), ('Master', 'Sber', '2024'), ('Mir', 'Alfa', '2023'), ('Master', 'Sber', '2025'), ('Master', 'Sber', '2024'), ('Mir', 'Alfa', '2025'), ('Visa', 'Tinkoff', '2023'), ('Mir', 'Alfa', '2023'), ('Mir', 'Sber', '2024'), ('Mir', 'Tinkoff', '2025'), ('Master', 'Raiffeisen', '2025'), ('Mir', 'Sber', '2025'), ('Mir', 'Sber', '2024'), ('Mir', 'Sber', '2025'), ('Mir', 'Raiffeisen', '2023'), ('Visa', 'Alfa', '2024'), ('Visa', 'Sber', '2025'); INSERT INTO bas_loyality (status, issue_year) values ('Gold', 2022), ('Silver', '2021'), ('Gold', '2022'), ('Bronze', '2022'), ('Bronze', '2020'), ('Bronze', '2020'), ('Bronze', '2020'), ('Silver', '2020'), ('Gold', '2020'), ('Silver', '2020'), ('Bronze', '2020'), ('Silver', '2020'), ('Silver', '2020'), ('Bronze', '2022'), ('Bronze', '2022'), ('Silver', '2022'), ('Bronze', '2022'), ('Bronze', '2020'), ('Silver', '2020'), ('Silver', '2022'), ('Bronze', '2020'), ('Bronze', '2020'), ('Bronze', '2020'), ('Bronze', '2021'), ('Bronze', '2022'), ('Bronze', '2020'), ('Silver', '2022'), ('Gold', '2022'), ('Bronze', '2021'), ('Bronze', '2020'), ('Bronze', '2022'), ('Bronze', '2021'), ('Bronze', '2021'), ('Bronze', '2021'), ('Bronze', '2020'), ('Bronze', '2021'), ('Silver', '2020'), ('Gold', '2021'), ('Silver', '2020'), ('Bronze', '2020'), ('Silver', '2021'), ('Silver', '2020'), ('Bronze', '2022'), ('Bronze', '2021'), ('Silver', '2022'), ('Silver', '2020'), ('Gold', '2021'), ('Bronze', '2020'), ('Bronze', '2022'), ('Gold', '2022'); create table bas_checks ( check_id serial primary key, store_id integer references bas_store, card_id integer references bas_card, loyality_id integer references bas_loyality, total integer default 0 ); DO $do$ BEGIN FOR i IN 1..25 LOOP INSERT INTO bas_checks (store_id, card_id, loyality_id, total) -- declare target columns! SELECT store_id, card_id, loyality_id, trunc(random() * 7777 + 1) FROM generate_series(1,500) i CROSS JOIN LATERAL ( SELECT store_id FROM bas_store ORDER BY random() LIMIT 1 ) s CROSS JOIN LATERAL ( SELECT card_id FROM bas_card ORDER BY random() LIMIT 1 ) c CROSS JOIN LATERAL ( SELECT loyality_id FROM bas_loyality ORDER BY random() LIMIT 1 ) l; END LOOP; END $do$; INSERT INTO bas_checks (store_id, card_id, loyality_id, total) SELECT store_id, card_id, loyality_id, trunc(random() * 7777 + 1) FROM generate_series(1,500) i CROSS JOIN LATERAL ( SELECT store_id FROM bas_store ORDER BY random() LIMIT 1 ) s CROSS JOIN LATERAL ( SELECT card_id FROM bas_card ORDER BY random() LIMIT 1 ) c CROSS JOIN LATERAL ( SELECT loyality_id FROM bas_loyality ORDER BY random() LIMIT 1 ) l; SELECT loyality_id FROM bas_loyality ORDER BY random() LIMIT 1 SELECT * FROM bas_checks join bas_card on bas_card.card_id = bas_checks.card_id limit 10
Stuck with a problem? Got Error? Ask ChatGPT!
Copy Clear