Advertisement
Guest User

Untitled

a guest
Feb 20th, 2019
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MySQL 2.97 KB | None | 0 0
  1. -- Konstantin Mihaylov N12 & Peter Mihaylov N16 XIIb
  2. DROP DATABASE demo_db;
  3.  
  4. CREATE DATABASE demo_db;
  5. USE demo_db;
  6.  
  7. -- TABLES
  8. CREATE TABLE Person (
  9.     id INTEGER AUTO_INCREMENT NOT NULL,
  10.     p_name VARCHAR(50) NOT NULL,
  11.     age INTEGER,
  12.     avg_weight FLOAT DEFAULT 0,
  13.     gender ENUM('M', 'F'),
  14.    
  15.     PRIMARY KEY (id)
  16. );
  17.  
  18. CREATE TABLE Weight_data (
  19.     id INTEGER NOT NULL,
  20.     created_at DATETIME,
  21.     weight FLOAT,
  22.     p_id INTEGER,
  23.    
  24.     PRIMARY KEY (id),
  25.     FOREIGN KEY (p_id) REFERENCES Person(id)
  26. );
  27.  
  28. INSERT INTO Person (id, p_name, age, gender) VALUES (1, 'Ivan', 18, 'M');
  29. INSERT INTO Person (id, p_name, age, gender) VALUES (2, 'Beatris', 18, 'F');
  30. INSERT INTO Person (id, p_name, age, gender) VALUES (3, 'Fea', 15, 'F');
  31.  
  32.  
  33. -- INSERT
  34.  
  35. DROP TRIGGER IF EXISTS person_weight_insert;
  36.  
  37. CREATE TRIGGER person_weight_insert AFTER INSERT ON Weight_data
  38. FOR EACH ROW
  39.     UPDATE Person SET avg_weight =
  40.         (SELECT AVG(weight) FROM Weight_data WHERE p_id = NEW.p_id)
  41.     WHERE NEW.p_id = Person.id;
  42.    
  43. INSERT INTO Weight_data (id, created_at, weight, p_id) VALUES (1, NOW(), 70, 1);
  44. INSERT INTO Weight_data (id, created_at, weight, p_id) VALUES (2, DATE_FORMAT(NOW() ,'%Y-01-01'), 80, 1);
  45. INSERT INTO Weight_data (id, created_at, weight, p_id) VALUES (6, DATE_FORMAT(NOW() ,'%Y-12-31'), 75, 1);
  46. INSERT INTO Weight_data (id, created_at, weight, p_id) VALUES (7, DATE_FORMAT(NOW() ,'%Y-01-01'), 35, 2);
  47. INSERT INTO Weight_data (id, created_at, weight, p_id) VALUES (8, DATE_FORMAT(NOW() ,'%Y-12-31'), 65, 2);
  48. INSERT INTO Weight_data (id, created_at, weight, p_id) VALUES (3, DATE_SUB(NOW(), INTERVAL 2 MONTH), 60, 1);
  49.  
  50. INSERT INTO Weight_data (id, created_at, weight, p_id) VALUES (4, NOW(), 60, 2);
  51. INSERT INTO Weight_data (id, created_at, weight, p_id) VALUES (5, NOW(), 40, 3);
  52.  
  53. SELECT * FROM Person;
  54.  
  55.  
  56. -- UPDATE
  57.  
  58. DROP TRIGGER IF EXISTS person_weight_update;
  59. CREATE TRIGGER person_weight_update AFTER UPDATE ON Weight_data
  60. FOR EACH ROW
  61.     UPDATE Person SET avg_weight =
  62.         (SELECT AVG(weight) FROM Weight_data WHERE p_id = NEW.p_id)
  63.     WHERE NEW.p_id = Person.id;
  64.    
  65. UPDATE Weight_data
  66.  SET   weight = 90
  67.  WHERE p_id = 3;
  68.  
  69. SELECT * FROM Person;
  70.  
  71.  
  72. -- AVG WEIGHT
  73.  
  74. SELECT id, AVG(weight)
  75. FROM Weight_data
  76. WHERE p_id = 1 AND created_at >= DATE_SUB(NOW(), INTERVAL 1 MONTH)
  77. GROUP BY id;
  78.  
  79.  
  80. -- WEIGHT FROM BEGINNIG AND END OF YEAR
  81. -- This example shows the results of using the ABS function on three different numbers.
  82. SELECT start_of_year.p_id, ABS(start_of_year.weight - end_of_year.weight)
  83. FROM Weight_data as start_of_year
  84. LEFT JOIN Weight_data as end_of_year ON
  85. end_of_year.created_at = DATE_FORMAT(NOW() ,'%Y-12-31')
  86. AND start_of_year.p_id = end_of_year.p_id
  87. WHERE start_of_year.created_at = DATE_FORMAT(NOW() ,'%Y-01-01')
  88. GROUP BY start_of_year.p_id, ABS(start_of_year.weight - end_of_year.weight);
  89.  
  90.  
  91. -- AVG MEN
  92.  
  93. SELECT AVG(avg_weight)
  94. FROM Person
  95. WHERE gender = 'M';
  96.  
  97.  
  98. -- AVG FEMALE
  99. SELECT AVG(avg_weight)
  100. FROM Person
  101. WHERE gender = 'F';
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement