From a66d8134d12d7eee5ef46b7d9791e958b89c81bc Mon Sep 17 00:00:00 2001 From: ThomasCode92 Date: 2023年10月23日 21:26:32 +0200 Subject: [PATCH 01/11] Base Setup --- .vscode/settings.json | 4 ++-- data/create-data/01-create-database.sql | 1 + .../02-create-payment-visitors-tables.sql | 12 ++++++++++ .../03-insert-data-methods-table.sql | 5 +++++ data/create-data/04-create-bookings-table.sql | 14 ++++++++++++ data/create-data/05-insert-data-bookings.sql | 22 +++++++++++++++++++ 6 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 data/create-data/01-create-database.sql create mode 100644 data/create-data/02-create-payment-visitors-tables.sql create mode 100644 data/create-data/03-insert-data-methods-table.sql create mode 100644 data/create-data/04-create-bookings-table.sql create mode 100644 data/create-data/05-insert-data-bookings.sql diff --git a/.vscode/settings.json b/.vscode/settings.json index 375aedb..ef97fef 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -26,7 +26,7 @@ "port": 3306, "driver": "MySQL", "name": "mysql", - "database": "default", + "database": "restaurants", "username": "root", "askForPassword": true }, @@ -36,7 +36,7 @@ "port": 5432, "driver": "PostgreSQL", "name": "postgresql", - "database": "default", + "database": "restaurants", "username": "postgres", "askForPassword": true } diff --git a/data/create-data/01-create-database.sql b/data/create-data/01-create-database.sql new file mode 100644 index 0000000..5633b7b --- /dev/null +++ b/data/create-data/01-create-database.sql @@ -0,0 +1 @@ +CREATE DATABASE restaurants; diff --git a/data/create-data/02-create-payment-visitors-tables.sql b/data/create-data/02-create-payment-visitors-tables.sql new file mode 100644 index 0000000..8436dac --- /dev/null +++ b/data/create-data/02-create-payment-visitors-tables.sql @@ -0,0 +1,12 @@ +CREATE TABLE payment_methods ( + id INT PRIMARY KEY AUTO_INCREMENT, -- MySQL syntax + -- id SERIAL PRIMARY KEY, -- PostgreSQL syntax + name VARCHAR(200) +); + +CREATE TABLE tables ( + id INT PRIMARY KEY AUTO_INCREMENT, -- MySQL syntax + -- id SERIAL PRIMARY KEY, -- PostgreSQL syntax + num_seats INT, + category VARCHAR(200) +); diff --git a/data/create-data/03-insert-data-methods-table.sql b/data/create-data/03-insert-data-methods-table.sql new file mode 100644 index 0000000..fb43a79 --- /dev/null +++ b/data/create-data/03-insert-data-methods-table.sql @@ -0,0 +1,5 @@ +INSERT INTO payment_methods (name) +VALUES ('Cash'), ('Credit Card'); + +INSERT INTO tables (num_seats, category) +VALUES (2, 'small'), (2, 'small'), ( 4, 'medium'), (6, 'large'), (8, 'large'); diff --git a/data/create-data/04-create-bookings-table.sql b/data/create-data/04-create-bookings-table.sql new file mode 100644 index 0000000..4b2c954 --- /dev/null +++ b/data/create-data/04-create-bookings-table.sql @@ -0,0 +1,14 @@ +CREATE TABLE bookings ( + id INT PRIMARY KEY AUTO_INCREMENT, -- MySQL syntax + -- id SERIAL PRIMARY KEY, + booking_date DATE NOT NULL, + num_guests INT NOT NULL, + amount_billed NUMERIC(6, 2) NOT NULL, + amount_tipped NUMERIC(6, 2), + payment_id INT, -- MySQL syntax + table_id INT, -- MySQL syntax + FOREIGN KEY (payment_id) REFERENCES payment_methods (id), -- MySQL syntax + FOREIGN KEY (table_id) REFERENCES tables (id) -- MySQL syntax + -- payment_id INT REFERENCES payment_methods, + -- table_id INT REFERENCES tables +); diff --git a/data/create-data/05-insert-data-bookings.sql b/data/create-data/05-insert-data-bookings.sql new file mode 100644 index 0000000..a0e60c4 --- /dev/null +++ b/data/create-data/05-insert-data-bookings.sql @@ -0,0 +1,22 @@ +INSERT INTO bookings (booking_date, num_guests, amount_billed, amount_tipped, payment_id, table_id) +VALUES + ('2021-11-04', 2, 19.90, 0.10, 2, 1), + ('2021-11-04', 1, 12.90, 0.00, 2, 2), + ('2021-11-05', 2, 15.50, NULL, 1, 1), + ('2021-11-05', 7, 113.40, 6.60, 1, 5), + ('2021-11-05', 6, 140.90, 10.10, 1, 4), + ('2021-11-05', 7, 98.60, 1.40, 1, 5), + ('2021-11-05', 4, 60.50, 4.50, 2, 3), + ('2021-11-06', 5, 86.10, 4.90, 2, 4), + ('2021-11-06', 3, 49.70, 5.30, 2, 4), + ('2021-11-06', 1, 15.90, 2.10, 1, 2), + ('2021-11-06', 7, 242.60, 12.40, 1, 5), + ('2021-11-06', 6, 180.00, 20.00, 1, 5), + ('2021-11-06', 3, 38.70, 11.30, 2, 3), + ('2021-11-06', 2, 25.60, 9.40, 1, 1), + ('2021-11-06', 3, 60.50, 14.50, 1, 4), + ('2021-11-07', 2, 26.40, 1.60, 2, 1), + ('2021-11-07', 2, 35.50, 4.50, 2, 2), + ('2021-11-07', 5, 101.90, NULL, 1, 4), + ('2021-11-07', 6, 130.10, 10, 1, 5), + ('2021-11-08', 2, 38.60, 0.40, 2, 2); From 79f4e1e8a6009ee2dc39945596ebc1ed85e6b82d Mon Sep 17 00:00:00 2001 From: ThomasCode92 Date: 2023年10月23日 21:28:14 +0200 Subject: [PATCH 02/11] Understanding COUNT() --- data/01-count.sql | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 data/01-count.sql diff --git a/data/01-count.sql b/data/01-count.sql new file mode 100644 index 0000000..ab0b47a --- /dev/null +++ b/data/01-count.sql @@ -0,0 +1,3 @@ +SELECT COUNT(*) FROM bookings; +SELECT COUNT(amount_tipped) FROM bookings; +SELECT COUNT(DISTINCT booking_date) FROM bookings; From fbf67ca0fb284086606d7829a114efac87702121 Mon Sep 17 00:00:00 2001 From: ThomasCode92 Date: 2023年10月23日 21:30:03 +0200 Subject: [PATCH 03/11] Working with MIN() & MAX() and Adding Aliases to Aggregate Functions --- data/02-max-min.sql | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 data/02-max-min.sql diff --git a/data/02-max-min.sql b/data/02-max-min.sql new file mode 100644 index 0000000..a5872f8 --- /dev/null +++ b/data/02-max-min.sql @@ -0,0 +1,6 @@ +SELECT + MAX(amount_billed) AS max_billed, + MAX(amount_tipped) AS max_tipped +FROM bookings; + +SELECT MIN(booking_date), MAX(booking_date) FROM bookings; From e57d3b4fe1ea3dc0ba8541ade01507d660c8dc19 Mon Sep 17 00:00:00 2001 From: ThomasCode92 Date: 2023年10月23日 21:30:59 +0200 Subject: [PATCH 04/11] Using SUM(), AVG() & ROUND() --- data/03-sum-avg.sql | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 data/03-sum-avg.sql diff --git a/data/03-sum-avg.sql b/data/03-sum-avg.sql new file mode 100644 index 0000000..c148f55 --- /dev/null +++ b/data/03-sum-avg.sql @@ -0,0 +1,3 @@ +SELECT SUM(amount_billed) FROM bookings; + +SELECT ROUND(AVG(amount_tipped), 4) FROM bookings; \ No newline at end of file From 176b7602553e488fbf9ca71fc2302a2bfbb17a7c Mon Sep 17 00:00:00 2001 From: ThomasCode92 Date: 2023年10月24日 20:12:33 +0200 Subject: [PATCH 05/11] Working with Filters & Joining Tables --- data/04-aggregate-filter-join.sql | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 data/04-aggregate-filter-join.sql diff --git a/data/04-aggregate-filter-join.sql b/data/04-aggregate-filter-join.sql new file mode 100644 index 0000000..e09c3f9 --- /dev/null +++ b/data/04-aggregate-filter-join.sql @@ -0,0 +1,12 @@ +SELECT ROUND(AVG(amount_tipped), 2) FROM bookings +WHERE amount_billed> 20 AND num_guests> 2; + +SELECT MAX(b.num_guests), MAX(t.num_seats) +FROM bookings AS b +INNER JOIN tables AS t ON b.table_id = t.id; + +SELECT MAX(b.num_guests), MAX(t.num_seats) +FROM bookings AS b +INNER JOIN tables AS t ON b.table_id = t.id +INNER JOIN payment_methods AS p ON b.payment_id = p.id +WHERE t.num_seats < 5 AND p.name = 'Cash'; From 318208c784061ff6d6de1591dfe9442225da16cf Mon Sep 17 00:00:00 2001 From: ThomasCode92 Date: 2023年10月24日 20:14:57 +0200 Subject: [PATCH 06/11] Applying GROUP BY in Practice --- data/05-group-by.sql | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 data/05-group-by.sql diff --git a/data/05-group-by.sql b/data/05-group-by.sql new file mode 100644 index 0000000..b64dabe --- /dev/null +++ b/data/05-group-by.sql @@ -0,0 +1,3 @@ +SELECT booking_date, SUM(num_guests) +FROM bookings +GROUP BY booking_date; From 5eea96828b643d75b72146c219a44540aa322c36 Mon Sep 17 00:00:00 2001 From: ThomasCode92 Date: 2023年10月24日 20:15:08 +0200 Subject: [PATCH 07/11] GROUP BY & Joined Queries --- data/05-group-by.sql | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/data/05-group-by.sql b/data/05-group-by.sql index b64dabe..e98b910 100644 --- a/data/05-group-by.sql +++ b/data/05-group-by.sql @@ -1,3 +1,13 @@ SELECT booking_date, SUM(num_guests) FROM bookings GROUP BY booking_date; + +SELECT p.name, SUM(b.num_guests) +FROM payment_methods AS p +INNER JOIN bookings AS b ON p.id = b.payment_id +GROUP BY p.name; + +SELECT p.name, b.booking_date, SUM(b.num_guests), ROUND(AVG(amount_tipped), 2) +FROM payment_methods AS p +INNER JOIN bookings AS b ON p.id = b.payment_id +GROUP BY p.name, b.booking_date; From 31a807c74ae444c8d9035de9a2d07b53a1255a0f Mon Sep 17 00:00:00 2001 From: ThomasCode92 Date: 2023年10月24日 20:15:40 +0200 Subject: [PATCH 08/11] Applying HAVING in Practice --- data/06-having.sql | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 data/06-having.sql diff --git a/data/06-having.sql b/data/06-having.sql new file mode 100644 index 0000000..f006de7 --- /dev/null +++ b/data/06-having.sql @@ -0,0 +1,9 @@ +SELECT booking_date, COUNT(booking_date) +FROM bookings +WHERE amount_billed> 30 +GROUP BY booking_date; + +SELECT booking_date, COUNT(booking_date) +FROM bookings +GROUP BY booking_date +HAVING SUM(amount_billed)> 30; From 501152431ef00078140cd8a1f7f80d3c6dbc6758 Mon Sep 17 00:00:00 2001 From: ThomasCode92 Date: 2023年10月24日 20:27:51 +0200 Subject: [PATCH 09/11] Working with Nested Subqueries --- data/07-nested-subqueries.sql | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 data/07-nested-subqueries.sql diff --git a/data/07-nested-subqueries.sql b/data/07-nested-subqueries.sql new file mode 100644 index 0000000..0c1e134 --- /dev/null +++ b/data/07-nested-subqueries.sql @@ -0,0 +1,11 @@ +SELECT booking_date +FROM bookings +GROUP BY booking_date +HAVING SUM(amount_billed) = ( + SELECT MIN(daily_sum) + FROM ( + SELECT booking_date, SUM(amount_billed) AS daily_sum + FROM bookings + GROUP BY booking_date + ) AS daily_table +); From 8303f6610143bab105743c5099ba0c6bd1c4c58f Mon Sep 17 00:00:00 2001 From: ThomasCode92 Date: 2023年10月24日 20:36:21 +0200 Subject: [PATCH 10/11] Introducing Window Functions --- data/08-window-functions.sql | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 data/08-window-functions.sql diff --git a/data/08-window-functions.sql b/data/08-window-functions.sql new file mode 100644 index 0000000..228b187 --- /dev/null +++ b/data/08-window-functions.sql @@ -0,0 +1,5 @@ +SELECT booking_date, amount_tipped, SUM(amount_tipped) OVER() +FROM bookings; + +SELECT booking_date, amount_tipped, SUM(amount_tipped) OVER(PARTITION BY booking_date) +FROM bookings; From 9e533eba25a016085bbed20ee11fe530f84c1000 Mon Sep 17 00:00:00 2001 From: ThomasCode92 Date: 2023年10月24日 20:37:15 +0200 Subject: [PATCH 11/11] Understanding ORDER BY and RANK() --- data/08-window-functions.sql | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/data/08-window-functions.sql b/data/08-window-functions.sql index 228b187..c3dcbde 100644 --- a/data/08-window-functions.sql +++ b/data/08-window-functions.sql @@ -3,3 +3,11 @@ FROM bookings; SELECT booking_date, amount_tipped, SUM(amount_tipped) OVER(PARTITION BY booking_date) FROM bookings; + +SELECT booking_date, amount_tipped, SUM(amount_tipped) +OVER(PARTITION BY booking_date ORDER BY amount_billed) +FROM bookings; + +SELECT booking_date, amount_tipped, RANK() +OVER(PARTITION BY booking_date ORDER BY amount_tipped DESC) +FROM bookings;

AltStyle によって変換されたページ (->オリジナル) /