From 30375bdbafa4acb32648a9d74920cae0a2d18006 Mon Sep 17 00:00:00 2001 From: ducnd58233 Date: Sat, 27 May 2023 19:07:25 +0700 Subject: [PATCH] asm1 database --- sol-1-1393.sql | 4 ++ sol-1-1907.sql | 5 +++ sol-2.sql | 118 +++++++++++++++++++++++++++++++++++++++++++++++++ sol-3.sql | 88 ++++++++++++++++++++++++++++++++++++ 4 files changed, 215 insertions(+) create mode 100644 sol-1-1393.sql create mode 100644 sol-1-1907.sql create mode 100644 sol-2.sql create mode 100644 sol-3.sql diff --git a/sol-1-1393.sql b/sol-1-1393.sql new file mode 100644 index 0000000..a742215 --- /dev/null +++ b/sol-1-1393.sql @@ -0,0 +1,4 @@ +select stock_name, +sum(case when operation = 'Buy' then -price else price end) as capital_gain_loss +from stocks +group by stock_name; \ No newline at end of file diff --git a/sol-1-1907.sql b/sol-1-1907.sql new file mode 100644 index 0000000..c925fd3 --- /dev/null +++ b/sol-1-1907.sql @@ -0,0 +1,5 @@ +select "Low Salary" category, sum(case when income < 20000 then 1 else 0 end) accounts_count from accounts +union +select "Average Salary" category, sum(case when income >= 20000 and income <= 50000 then 1 else 0 end) accounts_count from accounts +union +select "High Salary" category, sum(case when income > 50000 then 1 else 0 end) accounts_count from accounts \ No newline at end of file diff --git a/sol-2.sql b/sol-2.sql new file mode 100644 index 0000000..093db42 --- /dev/null +++ b/sol-2.sql @@ -0,0 +1,118 @@ +-- DROP DATABASE ep_asm1_2; + +CREATE DATABASE IF NOT EXISTS ep_asm1_2; +USE ep_asm1_2; + +DROP TABLE IF EXISTS `professors`; +CREATE TABLE `professors`( + `id` INT NOT NULL AUTO_INCREMENT, + `fname` VARCHAR(50), + `lname` VARCHAR(50), + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +DROP TABLE IF EXISTS `students`; +CREATE TABLE `students`( + `id` INT NOT NULL AUTO_INCREMENT, + `fname` VARCHAR(50), + `lname` VARCHAR(50), + `street` VARCHAR(255), + `city` VARCHAR(50), + `zip` VARCHAR(10), + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +DROP TABLE IF EXISTS `courses`; +CREATE TABLE `courses`( + `id` INT NOT NULL AUTO_INCREMENT, + `name` VARCHAR(255), + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +DROP TABLE IF EXISTS `classes`; +CREATE TABLE `classes`( + `id` INT NOT NULL AUTO_INCREMENT, + `name` VARCHAR(255), + `prof_id` INT, + `course_id` INT, + `room_id` INT, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +DROP TABLE IF EXISTS `rooms`; +CREATE TABLE `rooms`( + `id` INT NOT NULL AUTO_INCREMENT, + `loc` VARCHAR(50), + `cap` VARCHAR(50), + `class_id` INT, + PRIMARY KEY (`id`) +) ENGINE=InnoDB; + +DROP TABLE IF EXISTS `enrolls`; +CREATE TABLE `enrolls`( + `stud_id` INT NOT NULL, + `class_id` INT NOT NULL, + `grade` VARCHAR(3), + PRIMARY KEY (`stud_id`, `class_id`) +) ENGINE=InnoDB; + + +-- Add Foreign Key +-- Classes +ALTER TABLE Classes +ADD FOREIGN KEY (`prof_id`) REFERENCES Professors(`id`); +ALTER TABLE Classes +ADD FOREIGN KEY (`course_id`) REFERENCES Courses(`id`); +ALTER TABLE Classes +ADD FOREIGN KEY (`room_id`) REFERENCES Rooms(`id`); + +-- Rooms +ALTER TABLE Rooms +ADD FOREIGN KEY (`class_id`) REFERENCES Classes(`id`); + +-- Enrols +ALTER TABLE Enrolls +ADD FOREIGN KEY (`stud_id`) REFERENCES Students(`id`); +ALTER TABLE Enrolls +ADD FOREIGN KEY (`class_id`) REFERENCES Classes(`id`); + +-- Insert to Professor +insert into Professors values (1, 'Albert', 'Einstein'); +insert into Professors values (2, 'Nicolas', 'Tesla'); +insert into Professors values (3, 'Andrew', 'Ng'); + +-- Insert to Student +insert into Students values (1, 'A', 'Nguyen', 'ABC 1', 'HCM', '70000'); +insert into Students values (2, 'B', 'Tran', 'DEF 1', 'HCM', '70000'); +insert into Students values (3, 'C', 'Pham', 'HIJ 1', 'HCM', '70000'); + +-- Insert to Course +insert into Courses values (1, 'PE'); +insert into Courses values (2, 'Math'); +insert into Courses values (3, 'Physics'); +insert into Courses values (4, 'Henshin'); + +-- Insert to Class +insert into Classes values (1, 'PE1', 1, 1, 1); +insert into Classes values (2, 'MA1', 2, 2, 2); +insert into Classes values (3, 'PH1', 3, 3, 3); +insert into Classes values (4, 'HE1', 3, 3, 4); +insert into Classes values (5, 'HE2', 3, 4, 5); + +-- Insert to Room +insert into Rooms values (1, '001', '10', 1); +insert into Rooms values (2, '002', '10', 2); +insert into Rooms values (3, '003', '10', 3); +insert into Rooms values (4, '004', '10', 4); +insert into Rooms values (5, '005', '10', 5); + +-- Insert to Enroll +insert into Enrolls values (1, 2, 'C'); +insert into Enrolls values (2, 1, 'F'); +insert into Enrolls values (2, 2, 'A'); +insert into Enrolls values (2, 3, 'D'); +insert into Enrolls values (3, 1, 'B'); +insert into Enrolls values (3, 3, 'E'); +insert into Enrolls values (1, 4, 'A'); +insert into Enrolls values (2, 4, 'B'); +insert into Enrolls values (3, 4, 'C'); diff --git a/sol-3.sql b/sol-3.sql new file mode 100644 index 0000000..7a170fc --- /dev/null +++ b/sol-3.sql @@ -0,0 +1,88 @@ +-- 1 +select concat(p.fname, ' ', p.lname) as 'Professor Name', + concat(s.fname, ' ', s.lname) as 'Student Name', + count(c.id) as 'Number of Related Classes' +from Professors p +join Classes c on c.prof_id = p.id +join Enrolls e on e.class_id = c.id +join Students s on s.id = e.stud_id +group by p.id, s.id; + +-- 2 +select distinct(co.id) +from Professors p +join Classes cl on cl.prof_id = p.id +join Courses co on co.class_id = cl.id +group by p.id; + +-- 3 +select distinct(co.id) +from Students s +join Enrolls e on e.stud_id = s.id +join Classes cl on cl.id = e.class_id +join Courses co on co.id = cl.course_id +group by s.id; + +-- 4 +create or replace view Grade2Score as +select stud_id, class_id, +( +case + when grade = 'A' then 10 + when grade = 'B' then 8 + when grade = 'C' then 6 + when grade = 'D' then 4 + when grade = 'E' then 2 + else 0 +end +) as score +from Enrolls; + +select * from Grade2Score; + +-- 5 +select +avg(score) as avg_score, +( +case + when avg(score) >= 8 then 'Good' + when avg(score) >= 5 then 'Average' + else 'Weak' +end +) as classification +from Grade2Score +where stud_id = 1; + +-- 6 +select class_id, +avg(score) as avg_score, +( +case + when avg(score) >= 9 then 'A' + when avg(score) >= 8 then 'B' + when avg(score) >= 6 then 'C' + when avg(score) >= 4 then 'D' + when avg(score) >= 2 then 'E' + else 'F' +end +) as classification +from Grade2Score +group by class_id; + +-- 7 +select co.id, +avg(gs.score) as avg_score, +( +case + when avg(gs.score) >= 9 then 'A' + when avg(gs.score) >= 8 then 'B' + when avg(gs.score) >= 6 then 'C' + when avg(gs.score) >= 4 then 'D' + when avg(gs.score) >= 2 then 'E' + else 'F' +end +) as classification +from Courses co +join Classes cl on cl.course_id = co.id +join Grade2Score gs on gs.class_id = cl.id +group by co.id; \ No newline at end of file