Skip to content

Instantly share code, notes, and snippets.

@rintaun
Last active August 29, 2015 14:15
Show Gist options
  • Save rintaun/e5c049f653407129eaa2 to your computer and use it in GitHub Desktop.
Save rintaun/e5c049f653407129eaa2 to your computer and use it in GitHub Desktop.
Simple system to track grades and easily calculate GPA (cumulative, specific year, or specific term)
CREATE TABLE classes (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL,
year INTEGER NOT NULL,
term INTEGER NOT NULL,
grade DECIMAL NOT NULL,
credits INTEGER NOT NULL
);
CREATE OR REPLACE FUNCTION gpa() RETURNS DECIMAL
LANGUAGE SQL
AS $$
SELECT SUM(grade * credits) / SUM(credits) FROM classes;
$$;
CREATE OR REPLACE FUNCTION gpa(year INTEGER) RETURNS DECIMAL
LANGUAGE SQL
AS $$
SELECT SUM(grade * credits) / SUM(credits) FROM classes WHERE year=$1;
$$;
CREATE OR REPLACE FUNCTION gpa(year INTEGER, term INTEGER) RETURNS DECIMAL
LANGUAGE SQL
AS $$
SELECT SUM(grade * credits) / SUM(credits) FROM classes WHERE year=$1 AND term=$2;
$$;
COMMENT ON COLUMN classes.name IS 'Class name';
COMMENT ON COLUMN classes.year IS 'Academic year';
COMMENT ON COLUMN classes.term IS 'Number of term within academic year';
COMMENT ON COLUMN classes.grade IS 'Final grade in grade points, e.g. A = 4.0, B = 3.0, etc.';
COMMENT ON COLUMN classes.credits IS 'Number of credits earned from the class';
COMMENT ON FUNCTION gpa() IS 'Calculate cumulative GPA';
COMMENT ON FUNCTION gpa(year INTEGER) IS 'Calculate gpa for specific academic year';
COMMENT ON FUNCTION gpa(year INTEGER, term INTEGER) IS 'Calculate gpa for specific term in an academic year';
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment