Advertisement
Guest User

Untitled

a guest
Feb 20th, 2019
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MySQL 1.72 KB | None | 0 0
  1. DROP DATABASE IF EXISTS WeightDB;
  2. CREATE DATABASE WeightDB;
  3.  
  4. USE WeightDB;
  5.  
  6. CREATE TABLE person(
  7.     id INTEGER AUTO_INCREMENT PRIMARY KEY,
  8.     p_name VARCHAR(50) NOT NULL,
  9.     average_weight INTEGER DEFAULT 0,
  10.     gender ENUM('M', 'F') NOT NULL
  11. );
  12.  
  13. CREATE TABLE weight_data(
  14.     id INTEGER AUTO_INCREMENT PRIMARY KEY,
  15.     person_id INTEGER,
  16.     weight INTEGER DEFAULT 0,
  17.     FOREIGN KEY (person_id) REFERENCES person(id),
  18.     created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  19. );
  20.  
  21.  
  22. DELIMITER $$
  23. CREATE TRIGGER calculate_avg
  24.     AFTER INSERT ON weight_data
  25.     FOR EACH ROW
  26. BEGIN
  27.     UPDATE person
  28.     SET average_weight = (SELECT AVG(weight) FROM weight_data
  29.                           WHERE person.id = weight_data.person_id)
  30.     WHERE id = New.person_id;
  31. END$$
  32. DELIMITER ;
  33.  
  34. INSERT INTO person(p_name, gender) VALUES('Ivancho', 'M');
  35. INSERT INTO person(p_name, gender) VALUES('Mariika', 'F');
  36.  
  37. INSERT INTO weight_data(person_id, weight) VALUES(1, 70);
  38. INSERT INTO weight_data(person_id, weight) VALUES(1, 80);
  39. INSERT INTO weight_data(person_id, weight) VALUES(1, 80);
  40.  
  41. INSERT INTO weight_data(person_id, weight) VALUES(2, 45);
  42. INSERT INTO weight_data(person_id, weight) VALUES(2, 50);
  43.  
  44. SELECT * FROM weight_data;
  45. SELECT * FROM person;
  46.  
  47. SELECT AVG(wd.weight) as 'Average Weight(1 month)' FROM person p
  48. JOIN weight_data wd
  49. WHERE wd.created_at >= DATE_SUB(NOW(), INTERVAL 30 day) AND p.id = 1;
  50.  
  51. SELECT ABS(
  52.     (SELECT weight FROM weight_data WHERE person_id = 1 ORDER BY weight ASC LIMIT 1) -
  53.     (SELECT weight FROM weight_data WHERE person_id = 1 ORDER BY weight DESC LIMIT 1)
  54. );
  55.  
  56. SELECT AVG(p.average_weight) as 'Avg female' FROM person p
  57. WHERE p.gender = 'F';
  58.  
  59. SELECT AVG(p.average_weight) as 'Avg male' FROM person p
  60. WHERE p.gender = 'M';
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement