Mehdi
Mehdi

Reputation: 37

Appropriate SELECT Statement

I have the following tables:

CREATE TABLE Subject
(
    Subject_Code      INTEGER,
    Subject_Year      VARCHAR (8),
    PRIMARY KEY (Subject_Code, Subject_Year),
    Teacher_ID INTEGER REFERENCES 
);

CREATE TABLE Teacher
(
    TeacherID        INTEGER PRIMARY KEY,
    FirstName         TEXT,
    Department_ID INTEGER References Academic Department(Department_ID)
);

CREATE TABLE Subject-taken
(
    Marks_Obtained   INTEGER,
    Subject_Code      INTEGER REFERENCES subject (Subject_Code),
    Candidate_ID       INTEGER REFERENCES Candidate (Candidate_ID),
    PRIMARY KEY (Subject_Code, Candidate_ID)
);

CREATE TABLE Academic_Department
(
    Department_ID     INTEGER PRIMARY KEY,
    Department_Name   TEXT
);

I've already tried the following select statement

  SELECT m.subject_code,
         MIN (marks_obtained) AS Min_Marks,
         MAX (marks_obtained) AS Max_Marks
    FROM Subject-taken m, Subject a
GROUP BY m.Subject_Code;

Want to use the join function any suggestions on where to use it in order to join the departments with subjects and students

Upvotes: 1

Views: 88

Answers (1)

TheWildHealer
TheWildHealer

Reputation: 1626

Make use of joins to link your data between tables. Use group by to make statistics by some fields. You can try something like this:

SELECT
    Subjects.Subject_Code,
    Subjects.Subject_Name,
    Teachers.TeacherID,
    Academic_Department.Department_ID,
    min(Subject-taken.Marks_Obtained) as min_marks,
    max(Subject-taken.Marks_Obtained) as max_marks,
    avg(Subject-taken.Marks_Obtained) as avg_marks,
    stddev_samp(subject-taken.Marks_Obtained) as stddev_marks
FROM
    Subjects LEFT JOIN
    Teachers ON Subjects.TeacherID = Subjects.TeacherID LEFT JOIN
    Academic_Department ON Teachers.Department_ID = Academic_Department.Department_ID LEFT JOIN
    Subject-taken ON Subjects.Subject_Code = Subject-taken.Subject_Code
GROUP BY
    Subjects.Subject_Code,
    Subject.Subject_Name,
    Teacher.TeacherID,
    Academic_Department.Department_ID

I don't really know if stddev_samp is the aggregate function you need, stddev_pop is also available. Please refer to this PostgreSQL documentation table to find out.

Upvotes: 1

Related Questions