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
4 changes: 4 additions & 0 deletions sol-1-1393.sql
Original file line number Diff line number Diff line change
@@ -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;
5 changes: 5 additions & 0 deletions sol-1-1907.sql
Original file line number Diff line number Diff line change
@@ -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
118 changes: 118 additions & 0 deletions sol-2.sql
Original file line number Diff line number Diff line change
@@ -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');
88 changes: 88 additions & 0 deletions sol-3.sql
Original file line number Diff line number Diff line change
@@ -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;