From d07764c8175fb18f666b7f5d6fee9b80ce637b3e Mon Sep 17 00:00:00 2001 From: daniel-tran Date: Sat, 27 May 2023 20:47:32 +0700 Subject: [PATCH] assignment-1-dungtran --- sol-1.sql | 30 ++++++++ sol-2.sql | 223 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 253 insertions(+) create mode 100644 sol-1.sql create mode 100644 sol-2.sql diff --git a/sol-1.sql b/sol-1.sql new file mode 100644 index 0000000..66f70ba --- /dev/null +++ b/sol-1.sql @@ -0,0 +1,30 @@ +-- capital_gain_loss +select stock_name, +SUM( + CASE + WHEN operation = "Buy" THEN price * -1 + ELSE price + END +) AS capital_gain_loss +from Stocks +group by stock_name; + +--count_salary_categories.sql +SELECT type.category AS category , +COUNT(account_id) AS accounts_count +FROM ( + SELECT 'Low Salary' AS category + UNION + SELECT 'Average Salary' AS category + UNION + SELECT 'High Salary' AS category +) AS type +LEFT JOIN accounts AS accounts +ON type.category = ( + CASE + WHEN accounts.income > 50000 THEN "High Salary" + WHEN accounts.income >= 20000 THEN "Average Salary" + ELSE "Low Salary" + END +) +group by type.category; \ No newline at end of file diff --git a/sol-2.sql b/sol-2.sql new file mode 100644 index 0000000..630bd92 --- /dev/null +++ b/sol-2.sql @@ -0,0 +1,223 @@ +SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0; +SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS = 0; +SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE = 'TRADITIONAL,ALLOW_INVALID_DATES'; + +------------------------------------------ CREATE DATABASE -------------------------------------------------------- +DROP DATABASE IF EXISTS `SCHOOL`; +CREATE DATABASE IF NOT EXISTS `SCHOOL`; +USE `SCHOOL`; + +CREATE TABLE IF NOT EXISTS PROFFESSOR ( + `PROF_ID` INT AUTO_INCREMENT PRIMARY KEY, + `PROF_LNAME` VARCHAR(50) NOT NULL, + `PROF_FNAME` VARCHAR(50) NOT NULL +); + +CREATE TABLE IF NOT EXISTS STUDENT ( + `STUD_ID` INT AUTO_INCREMENT PRIMARY KEY, + `STUD_FNAME` VARCHAR(10) NOT NULL, + `STUD_LNAME` VARCHAR(10) NOT NULL, + `STUD_STREET` VARCHAR(10) DEFAULT NULL, + `STUD_CITY` VARCHAR(10) NULL DEFAULT NULL, + `STUD_ZIP` VARCHAR(10) NULL DEFAULT NULL +); + +CREATE TABLE IF NOT EXISTS COURSE ( + `COURSE_ID` INT AUTO_INCREMENT PRIMARY KEY, + `COURSE_NAME` VARCHAR(255) NOT NULL +); + +CREATE TABLE IF NOT EXISTS CLASS( + `CLASS_ID` INT AUTsO_INCREMENT PRIMARY KEY, + `CLASS_NAME` VARCHAR(255), + `PROF_ID` INT, + `COURSE_ID` INT, + FOREIGN KEY (`PROF_ID`) REFERENCES `PROFFESSOR` (`PROF_ID`) ON UPDATE RESTRICT ON DELETE RESTRICT, + FOREIGN KEY (`COURSE_ID`) REFERENCES `COURSE` (`COURSE_ID`) ON UPDATE RESTRICT ON DELETE RESTRICT +); + +CREATE TABLE IF NOT EXISTS ROOM ( + `ROOM_ID` INT AUTO_INCREMENT PRIMARY KEY, + `ROOM_LOC` VARCHAR(50), + `ROOM_CAP` VARCHAR(50), + `CLASS_ID` INT, + FOREIGN KEY (`CLASS_ID`) REFERENCES `CLASS`(`CLASS_ID`) ON UPDATE RESTRICT ON DELETE RESTRICT +); + +CREATE TABLE IF NOT EXISTS ENROLL( + `STUD_ID` INT AUTO_INCREMENT, + `CLASS_ID` INT, + `GRADE` VARCHAR(3), + FOREIGN KEY (`STUD_ID`) REFERENCES `STUDENT`(`STUD_ID`) ON UPDATE RESTRICT ON DELETE RESTRICT, + FOREIGN KEY (`CLASS_ID`) REFERENCES `CLASS`(`CLASS_ID`) ON UPDATE RESTRICT ON DELETE RESTRICT, + PRIMARY KEY (`STUD_ID`, `CLASS_ID`) +); + +------------------------------------------ INSERT DATABASE -------------------------------------------------------- +-- PROFFESSOR +INSERT INTO `PROFFESSOR` (`PROF_FNAME`, `PROF_LNAME`) VALUES('Peter','John'); +INSERT INTO `PROFFESSOR` (`PROF_FNAME`, `PROF_LNAME`) VALUES('Adam','Smith'); +INSERT INTO `PROFFESSOR` (`PROF_FNAME`, `PROF_LNAME`) VALUES('Warrent','Bridge'); +INSERT INTO `PROFFESSOR` (`PROF_FNAME`, `PROF_LNAME`) VALUES('Peterson','Wick'); +INSERT INTO `PROFFESSOR` (`PROF_FNAME`, `PROF_LNAME`) VALUES('Hello','World'); +INSERT INTO `PROFFESSOR` (`PROF_FNAME`, `PROF_LNAME`) VALUES('Professor','Wong'); + +-- PROFFESSOR +INSERT INTO `STUDENT` (`STUD_FNAME`, `STUD_LNAME`,`STUD_STREET`,`STUD_CITY`,`STUD_ZIP`) VALUES ('Adam','John', 'street 1','city 1','zip 1'); +INSERT INTO `STUDENT` (`STUD_FNAME`, `STUD_LNAME`,`STUD_STREET`,`STUD_CITY`,`STUD_ZIP`) VALUES ('Peter','John','street 2','city 2','zip 2'); +INSERT INTO `STUDENT` (`STUD_FNAME`, `STUD_LNAME`,`STUD_STREET`,`STUD_CITY`,`STUD_ZIP`) VALUES ('Harry','Kane','street 3','city 3','zip 3'); +INSERT INTO `STUDENT` (`STUD_FNAME`, `STUD_LNAME`,`STUD_STREET`,`STUD_CITY`,`STUD_ZIP`) VALUES ('Ronie','Smith','street 4','city 4','zip 4'); +INSERT INTO `STUDENT` (`STUD_FNAME`, `STUD_LNAME`,`STUD_STREET`,`STUD_CITY`,`STUD_ZIP`) VALUES ('Luke','Shaw', 'street 5','city 5','zip 5'); +INSERT INTO `STUDENT` (`STUD_FNAME`, `STUD_LNAME`,`STUD_STREET`,`STUD_CITY`,`STUD_ZIP`) VALUES ('Helen','Dane','street 6','city 6','zip 6'); +INSERT INTO `STUDENT` (`STUD_FNAME`, `STUD_LNAME`,`STUD_STREET`,`STUD_CITY`,`STUD_ZIP`) VALUES ('Danie','John','street 7','city 7','zip 7'); +INSERT INTO `STUDENT` (`STUD_FNAME`, `STUD_LNAME`,`STUD_STREET`,`STUD_CITY`,`STUD_ZIP`) VALUES ('Mike','Gil', 'street 8','city 8','zip 8'); +INSERT INTO `STUDENT` (`STUD_FNAME`, `STUD_LNAME`,`STUD_STREET`,`STUD_CITY`,`STUD_ZIP`) VALUES ('Sauny','Curry','street 9','city 9','zip 9'); +INSERT INTO `STUDENT` (`STUD_FNAME`, `STUD_LNAME`,`STUD_STREET`,`STUD_CITY`,`STUD_ZIP`) VALUES ('Adama','Stone','street 10','city 10','zip 10'); +-- COURSE +INSERT INTO `COURSE` (`COURSE_NAME`) VALUES('PROGRAMING'); +INSERT INTO `COURSE` (`COURSE_NAME`) VALUES('BIOLOGY'); +INSERT INTO `COURSE` (`COURSE_NAME`) VALUES('MATH'); +INSERT INTO `COURSE` (`COURSE_NAME`) VALUES('ENGLISH'); +INSERT INTO `COURSE` (`COURSE_NAME`) VALUES('PHYSICS'); +-- CLASS +INSERT INTO `CLASS` (`CLASS_NAME`,`PROF_ID`,`COURSE_ID`) VALUES('CLASS-A1',1,1); +INSERT INTO `CLASS` (`CLASS_NAME`,`PROF_ID`,`COURSE_ID`) VALUES('CLASS-A2',2,3); +INSERT INTO `CLASS` (`CLASS_NAME`,`PROF_ID`,`COURSE_ID`) VALUES('CLASS-A3',3,5); +INSERT INTO `CLASS` (`CLASS_NAME`,`PROF_ID`,`COURSE_ID`) VALUES('CLASS-A4',5,4); +INSERT INTO `CLASS` (`CLASS_NAME`,`PROF_ID`,`COURSE_ID`) VALUES('CLASS-A5',6,2); +INSERT INTO `CLASS` (`CLASS_NAME`,`PROF_ID`,`COURSE_ID`) VALUES('CLASS-A6',1,1); +INSERT INTO `CLASS` (`CLASS_NAME`,`PROF_ID`,`COURSE_ID`) VALUES('CLASS-A7',4,5); +INSERT INTO `CLASS` (`CLASS_NAME`,`PROF_ID`,`COURSE_ID`) VALUES('CLASS-A8',6,3); +INSERT INTO `CLASS` (`CLASS_NAME`,`PROF_ID`,`COURSE_ID`) VALUES('CLASS-A9',3,2); +INSERT INTO `CLASS` (`CLASS_NAME`,`PROF_ID`,`COURSE_ID`) VALUES('CLASS-A10',4,4); +INSERT INTO `CLASS` (`CLASS_NAME`,`PROF_ID`,`COURSE_ID`) VALUES('CLASS-A11',2,5); +INSERT INTO `CLASS` (`CLASS_NAME`,`PROF_ID`,`COURSE_ID`) VALUES('CLASS-A12',2,3); +INSERT INTO `CLASS` (`CLASS_NAME`,`PROF_ID`,`COURSE_ID`) VALUES('CLASS-A13',5,1); +-- ROOM +INSERT INTO `ROOM` (`ROOM_LOC`, `ROOM_CAP`, `CLASS_ID`) VALUES('LOC-1',30,1); +INSERT INTO `ROOM` (`ROOM_LOC`, `ROOM_CAP`, `CLASS_ID`) VALUES('LOC-2',30,2); +INSERT INTO `ROOM` (`ROOM_LOC`, `ROOM_CAP`, `CLASS_ID`) VALUES('LOC-3',30,3); +INSERT INTO `ROOM` (`ROOM_LOC`, `ROOM_CAP`, `CLASS_ID`) VALUES('LOC-4',30,4); +INSERT INTO `ROOM` (`ROOM_LOC`, `ROOM_CAP`, `CLASS_ID`) VALUES('LOC-5',30,5); +INSERT INTO `ROOM` (`ROOM_LOC`, `ROOM_CAP`, `CLASS_ID`) VALUES('LOC-6',30,6); +INSERT INTO `ROOM` (`ROOM_LOC`, `ROOM_CAP`, `CLASS_ID`) VALUES('LOC-7',30,7); +INSERT INTO `ROOM` (`ROOM_LOC`, `ROOM_CAP`, `CLASS_ID`) VALUES('LOC-8',30,8); +INSERT INTO `ROOM` (`ROOM_LOC`, `ROOM_CAP`, `CLASS_ID`) VALUES('LOC-9',30,9); +INSERT INTO `ROOM` (`ROOM_LOC`, `ROOM_CAP`, `CLASS_ID`) VALUES('LOC-10',30,10); +INSERT INTO `ROOM` (`ROOM_LOC`, `ROOM_CAP`, `CLASS_ID`) VALUES('LOC-11',30,11); +INSERT INTO `ROOM` (`ROOM_LOC`, `ROOM_CAP`, `CLASS_ID`) VALUES('LOC-12',30,12); +INSERT INTO `ROOM` (`ROOM_LOC`, `ROOM_CAP`, `CLASS_ID`) VALUES('LOC-13',30,13); +-- ENROLL +INSERT INTO `ENROLL` (`STUD_ID`, `CLASS_ID`, `GRADE`) VALUES(1,1,'GR'); +INSERT INTO `ENROLL` (`STUD_ID`, `CLASS_ID`, `GRADE`) VALUES(1,2,'GR'); +INSERT INTO `ENROLL` (`STUD_ID`, `CLASS_ID`, `GRADE`) VALUES(1,3,'GR'); +INSERT INTO `ENROLL` (`STUD_ID`, `CLASS_ID`, `GRADE`) VALUES(2,3,'GR'); +INSERT INTO `ENROLL` (`STUD_ID`, `CLASS_ID`, `GRADE`) VALUES(2,4,'GR'); +INSERT INTO `ENROLL` (`STUD_ID`, `CLASS_ID`, `GRADE`) VALUES(2,5,'GR'); +INSERT INTO `ENROLL` (`STUD_ID`, `CLASS_ID`, `GRADE`) VALUES(2,6,'GR'); +INSERT INTO `ENROLL` (`STUD_ID`, `CLASS_ID`, `GRADE`) VALUES(3,6,'GR'); +INSERT INTO `ENROLL` (`STUD_ID`, `CLASS_ID`, `GRADE`) VALUES(3,7,'GR'); +INSERT INTO `ENROLL` (`STUD_ID`, `CLASS_ID`, `GRADE`) VALUES(3,8,'GR'); +INSERT INTO `ENROLL` (`STUD_ID`, `CLASS_ID`, `GRADE`) VALUES(4,8,'GR'); +INSERT INTO `ENROLL` (`STUD_ID`, `CLASS_ID`, `GRADE`) VALUES(4,9,'GR'); +INSERT INTO `ENROLL` (`STUD_ID`, `CLASS_ID`, `GRADE`) VALUES(4,10,'GR'); +INSERT INTO `ENROLL` (`STUD_ID`, `CLASS_ID`, `GRADE`) VALUES(5,10,'GR'); +INSERT INTO `ENROLL` (`STUD_ID`, `CLASS_ID`, `GRADE`) VALUES(5,11,'GR'); +INSERT INTO `ENROLL` (`STUD_ID`, `CLASS_ID`, `GRADE`) VALUES(5,12,'GR'); +INSERT INTO `ENROLL` (`STUD_ID`, `CLASS_ID`, `GRADE`) VALUES(6,11,'GR'); +INSERT INTO `ENROLL` (`STUD_ID`, `CLASS_ID`, `GRADE`) VALUES(6,12,'GR'); +INSERT INTO `ENROLL` (`STUD_ID`, `CLASS_ID`, `GRADE`) VALUES(6,13,'GR'); +INSERT INTO `ENROLL` (`STUD_ID`, `CLASS_ID`, `GRADE`) VALUES(6,13,'GR'); +INSERT INTO `ENROLL` (`STUD_ID`, `CLASS_ID`, `GRADE`) VALUES(7,12,'GR'); +INSERT INTO `ENROLL` (`STUD_ID`, `CLASS_ID`, `GRADE`) VALUES(7,14,'GR'); +INSERT INTO `ENROLL` (`STUD_ID`, `CLASS_ID`, `GRADE`) VALUES(8,15,'GR'); +INSERT INTO `ENROLL` (`STUD_ID`, `CLASS_ID`, `GRADE`) VALUES(8,16,'GR'); +INSERT INTO `ENROLL` (`STUD_ID`, `CLASS_ID`, `GRADE`) VALUES(9,16,'GR'); +INSERT INTO `ENROLL` (`STUD_ID`, `CLASS_ID`, `GRADE`) VALUES(10,16,'GR'); +INSERT INTO `ENROLL` (`STUD_ID`, `CLASS_ID`, `GRADE`) VALUES(8,16,'GR'); +INSERT INTO `ENROLL` (`STUD_ID`, `CLASS_ID`, `GRADE`) VALUES(7,16,'GR'); +INSERT INTO `ENROLL` (`STUD_ID`, `CLASS_ID`, `GRADE`) VALUES(10,15,'GR'); +INSERT INTO `ENROLL` (`STUD_ID`, `CLASS_ID`, `GRADE`) VALUES(6,16,'GR'); +INSERT INTO `ENROLL` (`STUD_ID`, `CLASS_ID`, `GRADE`) VALUES(4,13,'GR'); + +------------------------------------------ QUERY DATABASE -------------------------------------------------------- + +-- những cặp student-professor có dạy học nhau và số lớp mà họ có liên quan +SELECT CONCAT(P.PROF_FNAME , " " , P.PROF_LNAME) AS PROFFESSOR_NAME, +CONCAT(S.STUD_FNAME , " " , S.STUD_LNAME) AS STUDENT_NAME, +COUNT(C.CLASS_ID) AS TIME_MEET +FROM PROFFESSOR AS P +INNER JOIN CLASS AS C ON C.PROF_ID = P.PROF_ID +INNER JOIN ENROLL AS E ON E.CLASS_ID = C.CLASS_ID +INNER JOIN STUDENT AS S ON S.STUD_ID = E.STUD_ID +GROUP BY PROFFESSOR_NAME,STUDENT_NAME; + +-- những course (distinct) mà 1 professor cụ thể đang dạy +SELECT COURSE.COURSE_NAME +FROM COURSE +INNER JOIN CLASS ON CLASS.COURSE_ID = COURSE.COURSE_ID +INNER JOIN PROFFESSOR AS P ON P.PROF_ID = CLASS.PROF_ID +WHERE P.PROF_ID = 2 +GROUP BY COURSE.COURSE_NAME; + +-- những course (distinct) mà 1 student cụ thể đang học +SELECT COURSE.COURSE_NAME +FROM COURSE +INNER JOIN CLASS ON CLASS.COURSE_ID = COURSE.COURSE_ID +INNER JOIN ENROLL AS E ON E.CLASS_ID = CLASS.CLASS_ID +INNER JOIN STUDENT AS S ON S.STUD_ID = E.STUD_ID +WHERE S.STUD_ID = 1 +GROUP BY COURSE.COURSE_NAME; + +-- điểm số là A, B, C, D, E, F tương đương với 10, 8, 6, 4, 2, 0, điểm số trung bình của 1 học sinh cụ thể (quy ra lại theo chữ cái, và xếp loại học lực (weak nếu avg < 5, average nếu >=5 < 8, good nếu >=8 ) +SELECT ( +CASE + WHEN AVG(E.GRADE) >= 8 THEN "good" + WHEN AVG(E.GRADE) >= 5 THEN "average" + ELSE "weak" +END) AS LEVEL, +(CASE + WHEN AVG(E.GRADE) = 10 THEN "A" + WHEN AVG(E.GRADE) >= 8 THEN "B" + WHEN AVG(E.GRADE) >= 6 THEN "C" + WHEN AVG(E.GRADE) >= 4 THEN "D" + WHEN AVG(E.GRADE) >= 2 THEN "E" + ELSE "F" +END) AS MARK_LETTER, +CONCAT(S.STUD_FNAME , " " , S.STUD_LNAME) AS STUDENT_NAME +FROM STUDENT AS S +JOIN ENROLL AS E +GROUP BY S.STUD_ID, STUDENT_NAME; + +-- điểm số trung bình của các class (quy ra lại theo chữ cái) + +SELECT +(CASE + WHEN AVG(E.GRADE) = 10 THEN "A" + WHEN AVG(E.GRADE) >= 8 THEN "B" + WHEN AVG(E.GRADE) >= 6 THEN "C" + WHEN AVG(E.GRADE) >= 4 THEN "D" + WHEN AVG(E.GRADE) >= 2 THEN "E" + ELSE "F" +END) AS MARK_LETTER, C.CLASS_NAME +FROM CLASS AS C +JOIN ENROLL AS E ON E.CLASS_ID = C.CLASS_ID +GROUP BY C.CLASS_ID; + +-- điểm số trung bình của các course (quy ra lại theo chữ cái) + +SELECT +(CASE + WHEN AVG(E.GRADE) = 10 THEN "A" + WHEN AVG(E.GRADE) >= 8 THEN "B" + WHEN AVG(E.GRADE) >= 6 THEN "C" + WHEN AVG(E.GRADE) >= 4 THEN "D" + WHEN AVG(E.GRADE) >= 2 THEN "E" + ELSE "F" +END) AS MARK_LETTER, COURSE.COURSE_NAME +FROM CLASS +JOIN COURSE ON COURSE.COURSE_ID = CLASS.COURSE_ID +JOIN ENROLL AS E ON E.CLASS_ID = CLASS.CLASS_ID +GROUP BY COURSE.COURSE_ID; + +