Initialize the tables

  • User table:

    1. CREATE TABLE users (
    2. id SERIAL PRIMARY KEY,
    3. email VARCHAR(320) NOT NULL,
    4. password CHAR(60) NOT NULL
    5. );
  • Morning table:

    1. CREATE TABLE morning_report (
    2. id SERIAL PRIMARY KEY,
    3. report_date DATE not null,
    4. sleep_duration INT CHECK (sleep_duration >= 0),
    5. sleep_quality INT CHECK (sleep_quality >= 1 and sleep_quality <=5),
    6. sleep_mood INT CHECK (sleep_mood >= 1 and sleep_mood <=5),
    7. user_id INTEGER REFERENCES users(id)
    8. );
  • Evening table:

    1. CREATE TABLE evening_report (
    2. id SERIAL PRIMARY KEY,
    3. report_date DATE not null,
    4. exercise_duration INT CHECK (exercise_duration >= 0),
    5. study_duration INT CHECK (study_duration >= 0),
    6. eat_quality INT CHECK (eat_quality >= 1 and eat_quality <=5),
    7. general_mood INT CHECK (general_mood >= 1 and general_mood <=5),
    8. user_id INTEGER REFERENCES users(id)
    9. );

Get Summary report

  • get average sleep duration, time spent on sports and exercise, time spent studying, sleep quality, generic mood on Monthly and Weekly base.
  1. SELECT
  2. AVG(sleep_duration) AS sleep_duration_average,
  3. AVG(sleep_quality) AS sleep_quality_average
  4. FROM
  5. morning_report
  6. WHERE
  7. report_date >= '2020-12-01'
  8. AND
  9. report_date <= '2020-12-05'
  10. GROUP BY
  11. user_id
  1. SELECT
  2. AVG(exercise_duration) AS exercise_duration_average,
  3. AVG(study_duration) AS study_duration_average,
  4. AVG(general_mood) AS general_mood_average
  5. FROM
  6. evening_report
  7. WHERE
  8. report_date >= '2020-12-01'
  9. AND
  10. report_date <= '2020-12-05'
  11. GROUP BY
  12. user_id
  • get average mood
    1. SELECT user_id, AVG(sleep_mood)
    2. FROM (
    3. SELECT user_id, sleep_mood FROM morning_report WHERE report_date = '2020-12-05' GROUP BY user_id, sleep_mood
    4. UNION ALL
    5. SELECT user_id, general_mood FROM evening_report WHERE report_date = '2020-12-05' GROUP BY user_id, general_mood
    6. ) AS subquery
    7. GROUP BY user_id