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
22 changes: 22 additions & 0 deletions homework-1/create_tables.sql
Original file line number Diff line number Diff line change
@@ -1 +1,23 @@
-- SQL-команды для создания таблиц
CREATE TABLE employees
(employee_id serial,
first_name varchar (100) NOT NULL,
last_name varchar (100) NOT NULL,
title varchar (100) NOT NULL,
birth_date date ,
notes text
);

CREATE TABLE customers
(customer_id char (5) NOT NULL,
company_name varchar (100) NOT NULL,
contact_name varchar (100) NOT NULL
);

CREATE TABLE orders
(order_id int,
customer_id char (5) NOT NULL,
employee_id serial,
order_date date,
ship_city text
);
49 changes: 49 additions & 0 deletions homework-1/main.py
Original file line number Diff line number Diff line change
@@ -1 +1,50 @@
"""Скрипт для заполнения данными таблиц в БД Postgres."""
import psycopg2
import csv


with psycopg2.connect(
host='localhost',
database='north',
user='postgres',
password='Qwerty098'
) as conn:
with conn.cursor() as cur:
with open('north_data\\customers_data.csv') as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
cur.execute("INSERT INTO customers VALUES (%s,%s,%s)", (row['customer_id'],
row['company_name'], row['contact_name']))
cur.execute("SELECT * FROM customers")
rows = cur.fetchall()
for row in rows:
print(row)

with conn.cursor() as cur:
with open('north_data\\employees_data.csv') as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
cur.execute("INSERT INTO employees VALUES (%s,%s,%s,%s,%s,%s)", (row['employee_id'],
row['first_name'], row['last_name'],
row['title'], row['birth_date'],
row['notes']))
cur.execute("SELECT * FROM employees")
rows = cur.fetchall()
for row in rows:
print(row)


with conn.cursor() as cur:
with open('north_data\\orders_data.csv') as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
cur.execute("INSERT INTO orders VALUES (%s,%s,%s,%s,%s)", (row['order_id'],
row['customer_id'], row['employee_id'],
row['order_date'], row['ship_city']))
cur.execute("SELECT * FROM orders")
rows = cur.fetchall()
for row in rows:
print(row)


conn.close()
19 changes: 15 additions & 4 deletions homework-2/filter_sorting.sql
Original file line number Diff line number Diff line change
@@ -1,14 +1,25 @@
-- Напишите запросы, которые выводят следующую информацию:
-- 1. заказы, доставленные в страны France, Germany, Spain (таблица orders, колонка ship_country)
SELECT ...
SELECT *
FROM orders
WHERE ship_country IN ('France', 'Germany', 'Spain')

-- 2. уникальные страны и города, куда отправлялись заказы, отсортировать по странам и городам (таблица orders, колонки ship_country, ship_city)

SELECT DISTINCT ship_country, ship_city
FROM orders
ORDER BY ship_country, ship_city

-- 3. сколько дней в среднем уходит на доставку товара в Германию (таблица orders, колонки order_date, shipped_date, ship_country)

SELECT AVG(shipped_date-order_date)
FROM orders
WHERE ship_country IN ('Germany')

-- 4. минимальную и максимальную цену среди продуктов, не снятых с продажи (таблица products, колонки unit_price, discontinued не равно 1)

SELECT MIN(unit_price), MAX(unit_price)
FROM products
WHERE discontinued <>1

-- 5. минимальную и максимальную цену среди продуктов, не снятых с продажи и которых имеется не меньше 20 (таблица products, колонки unit_price, units_in_stock, discontinued не равно 1)
SELECT MIN(unit_price), MAX(unit_price)
FROM products
WHERE discontinued <>1 AND units_in_stock > 20
42 changes: 36 additions & 6 deletions homework-2/groupby.sql
Original file line number Diff line number Diff line change
@@ -1,20 +1,50 @@
-- Напишите запросы, которые выводят следующую информацию:
-- 1. заказы, отправленные в города, заканчивающиеся на 'burg'. Вывести без повторений две колонки (город, страна) (см. таблица orders, колонки ship_city, ship_country)

SELECT DISTINCT ship_city, ship_country
FROM orders
WHERE ship_city LIKE '%burg'

-- 2. из таблицы orders идентификатор заказа, идентификатор заказчика, вес и страну отгрузки. Заказ отгружен в страны, начинающиеся на 'P'. Результат отсортирован по весу (по убыванию). Вывести первые 10 записей.

SELECT order_id, customer_id, freight, ship_country
FROM orders
WHERE ship_country LIKE 'P%'
ORDER BY freight DESC
LIMIT 10

-- 3. имя, фамилию и телефон сотрудников, у которых в данных отсутствует регион (см таблицу employees)

SELECT first_name, last_name, home_phone
FROM employees
WHERE region IS NULL

-- 4. количество поставщиков (suppliers) в каждой из стран. Результат отсортировать по убыванию количества поставщиков в стране

SELECT DISTINCT country, COUNT(*)
FROM suppliers
GROUP BY country
ORDER BY COUNT(*) DESC

-- 5. суммарный вес заказов (в которых известен регион) по странам, но вывести только те результаты, где суммарный вес на страну больше 2750. Отсортировать по убыванию суммарного веса (см таблицу orders, колонки ship_region, ship_country, freight)

SELECT ship_country, SUM(freight)
FROM orders
WHERE ship_region IS NOT NULL
GROUP BY ship_country
HAVING SUM(freight) >2750

-- 6. страны, в которых зарегистрированы и заказчики (customers) и поставщики (suppliers) и работники (employees).

SELECT country
FROM customers
INTERSECT
SELECT country
FROM suppliers
INTERSECT
SELECT country
FROM employees

-- 7. страны, в которых зарегистрированы и заказчики (customers) и поставщики (suppliers), но не зарегистрированы работники (employees).
SELECT country
FROM customers
INTERSECT
SELECT country
FROM suppliers
EXCEPT
SELECT country
FROM employees
14 changes: 10 additions & 4 deletions homework-2/simple_queries.sql
Original file line number Diff line number Diff line change
@@ -1,14 +1,20 @@
-- Напишите запросы, которые выводят следующую информацию:
-- 1. "имя контакта" и "город" (contact_name, city) из таблицы customers (только эти две колонки)
SELECT ...
SELECT contact_name, city
FROM customers

-- 2. идентификатор заказа и разницу между датами формирования (order_date) заказа и его отгрузкой (shipped_date) из таблицы orders

SELECT order_id, shipped_date-order_date
FROM orders

-- 3. все города без повторов, в которых зарегистрированы заказчики (customers)

SELECT DISTINCT ship_city
FROM orders

-- 4. количество заказов (таблица orders)

SELECT COUNT(*)
FROM orders

-- 5. количество стран, в которые отгружался товар (таблица orders, колонка ship_country)
SELECT COUNT(DISTINCT ship_country)
FROM orders