Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 66 additions & 0 deletions postgres/data.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
DROP TABLE IF EXISTS regions CASCADE;
CREATE TABLE regions (
id serial PRIMARY KEY,
name varchar
);

INSERT INTO regions VALUES (1, 'Region 1');
INSERT INTO regions VALUES (2, 'Region 2');

DROP TABLE IF EXISTS locations CASCADE;
CREATE TABLE locations (
id serial PRIMARY KEY,
address varchar,
region_id integer
);

INSERT INTO locations VALUES (1, 'Location 1 (Region 1)', 1);
INSERT INTO locations VALUES (2, 'Location 2 (Region 1)', 1);
INSERT INTO locations VALUES (3, 'Location 3 (Region 2)', 2);

DROP TABLE IF EXISTS departments CASCADE;
CREATE TABLE departments (
id serial PRIMARY KEY,
name varchar,
location_id integer,
manager_id integer
);

INSERT INTO departments VALUES (1, 'Department 1 (Location 1)', 1, 1);
INSERT INTO departments VALUES (2, 'Department 2 (Location 1)', 1, 2);
INSERT INTO departments VALUES (3, 'Department 3 (Location 2)', 2, 3);
INSERT INTO departments VALUES (4, 'Department 4 (Location 3)', 3, 4);


DROP TABLE IF EXISTS employees CASCADE;
CREATE TABLE employees (
id serial PRIMARY KEY,
name varchar,
last_name varchar,
hire_date date,
salary integer,
email varchar,
manager_id integer,
department_id integer
);

INSERT INTO employees VALUES (1, 'Francesco', 'Rios', '2020-01-01', 5000, 'francesco.rios@dualbootpartners.com', NULL, 1);
INSERT INTO employees VALUES (2, 'Maisha', 'Pratt', '2020-06-01', 4500, 'maisha.pratt@dualbootpartners.com', NULL, 1);
INSERT INTO employees VALUES (3, 'Chad', 'Maldonado', '2021-01-01', 5000, 'chad.maldonado@dualbootpartners.com', NULL, 2);
INSERT INTO employees VALUES (4, 'Wilson', 'Johns', '2021-01-01', 5000, 'wilson.johns@dualbootpartners.com', NULL, 3);
INSERT INTO employees VALUES (5, 'Khalil', 'Christianson', '2022-01-01', 5000, 'khalil.christianson.@dualbootpartners.com', NULL, 4);
INSERT INTO employees VALUES (6, 'Zaki', 'French', '2020-03-11', 4000, 'zaki.french@dualbootpartners.com', 1, 1);
INSERT INTO employees VALUES (7, 'Sean', 'Terrell', '2021-05-21', 2000, 'sean.terrell@gmail.com', 1, 1);
INSERT INTO employees VALUES (8, 'Karl', 'Higgins', CURRENT_DATE - 25, 1000, NULL, 2, 1);
INSERT INTO employees VALUES (9, 'Ana', 'Velasquez', '2022-07-06', 2000, 'ana.velasquez@gmail.com', 3, 2);
INSERT INTO employees VALUES (10, 'Daisie', 'Oconnor', '2022-06-13', 3000, 'daisie.oconnor@dualbootpartners.com', 3, 2);
INSERT INTO employees VALUES (11, 'Keiran', 'Berg', '2022-05-08', 4000, 'keiran.berg@dualbootpartners.com', 4, 3);
INSERT INTO employees VALUES (12, 'Jasmine', 'Walters', '2022-04-22', 5000, 'jasmine.walters@dualbootpartners.com', 4, 3);
INSERT INTO employees VALUES (13, 'Callum', 'Gonzalez', '2022-03-24', 2000, 'callum.gonzalez@dualbootpartners.com', 5, 4);
INSERT INTO employees VALUES (14, 'Travis', 'Ochoa', '2022-02-07', 3000, 'travis.ochoa@dualbootpartners.com', 5, 4);

ALTER TABLE locations ADD FOREIGN KEY (region_id) REFERENCES regions(id);
ALTER TABLE departments ADD FOREIGN KEY (location_id) REFERENCES locations(id);
ALTER TABLE departments ADD FOREIGN KEY (manager_id) REFERENCES employees(id);
ALTER TABLE employees ADD FOREIGN KEY (department_id) REFERENCES departments(id);
ALTER TABLE employees ADD FOREIGN KEY (manager_id) REFERENCES employees(id);
49 changes: 49 additions & 0 deletions postgres/queries.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
-- Показать работников у которых нет почты или почта не в корпоративном домене (домен dualbootpartners.com)
SELECT
name, last_name, email
FROM employees
WHERE
email NOT LIKE '%@dualbootpartners.com'
OR email IS NULL;

-- Получить список работников нанятых в последние 30 дней
SELECT
name, last_name, email
FROM employees
WHERE
hire_date >= CURRENT_DATE - 30;

-- Найти максимальную и минимальную зарплату по каждому департаменту
SELECT
d.name,
MIN(e.salary) AS min_salary,
MAX(e.salary) AS max_salary
FROM departments d
JOIN employees e ON d.id = e.department_id
GROUP BY d.id
ORDER BY d.name;

-- Посчитать количество работников в каждом регионе
SELECT
r.name,
COUNT(*) AS employee_count
FROM regions r
JOIN locations l ON r.id = l.region_id
JOIN departments d ON l.id = d.location_id
JOIN employees e ON d.id = e.department_id
GROUP BY r.id
ORDER BY r.name;

-- Показать сотрудников у которых фамилия длиннее 10 символов
SELECT
name, last_name, email
FROM employees
WHERE
LENGTH(last_name) > 10;

-- Показать сотрудников с зарплатой выше средней по всей компании
SELECT
name, last_name, email, salary
FROM employees
WHERE
salary > (SELECT AVG(salary) FROM employees);