Advertisement
didkoslawow

Untitled

Feb 10th, 2024
971
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MySQL 1.79 KB | None | 0 0
  1. SELECT
  2.     w.id,
  3.     w.first_name,
  4.     w.last_name,
  5.     p.name AS preserve_name,
  6.     c.country_code
  7. FROM workers w
  8. LEFT JOIN preserves p ON p.id = w.preserve_id
  9. LEFT JOIN countries_preserves cp ON cp.preserve_id = p.id
  10. LEFT JOIN countries c ON c.id = cp.country_id
  11. WHERE w.salary > 5000 AND w.age < 50
  12. ORDER BY c.country_code;
  13.  
  14. SELECT
  15.     p.name,
  16.     COUNT(w.id) AS armed_workers
  17. FROM preserves p
  18. LEFT JOIN workers w ON w.preserve_id = p.id
  19. WHERE w.is_armed = 1
  20. GROUP BY p.name
  21. ORDER BY armed_workers DESC, p.name;
  22.  
  23. SELECT
  24.     p.name,
  25.     c.country_code,
  26.     YEAR(p.established_on) AS founded_in
  27. FROM
  28.     preserves p
  29. JOIN
  30.     countries_preserves cp ON p.id = cp.preserve_id
  31. JOIN
  32.     countries c ON cp.country_id = c.id
  33. WHERE
  34.     MONTH(p.established_on) = 5
  35. ORDER BY
  36.     p.established_on ASC
  37. LIMIT 5;
  38.  
  39. DELIMITER $$
  40.  
  41. CREATE FUNCTION udf_average_salary_by_position_name(position_name VARCHAR(40))
  42. RETURNS DECIMAL(19,2)
  43. DETERMINISTIC
  44. BEGIN
  45.     DECLARE avg_salary DECIMAL(19,2);
  46.    
  47.     SELECT AVG(salary)
  48.     INTO avg_salary
  49.     FROM workers w
  50.     JOIN positions p ON w.position_id = p.id
  51.     WHERE p.name = position_name;
  52.    
  53.     RETURN avg_salary;
  54. END $$
  55.  
  56. DELIMITER ;
  57.  
  58. SELECT p.name, udf_average_salary_by_position_name('Forester') as position_average_salary FROM positions p
  59. WHERE p.name = 'Forester';
  60.  
  61. DELIMITER $$
  62.  
  63. CREATE PROCEDURE udp_increase_salaries_by_country(country_name VARCHAR(40))
  64. BEGIN
  65.     DECLARE country_id INT;
  66.    
  67.     SELECT id INTO country_id FROM countries WHERE name = country_name;
  68.  
  69.     UPDATE workers w
  70.     JOIN preserves p ON w.preserve_id = p.id
  71.     JOIN countries_preserves cp ON p.id = cp.preserve_id
  72.     SET w.salary = w.salary * 1.05
  73.     WHERE cp.country_id = country_id;
  74. END $$
  75.  
  76. DELIMITER ;
  77.  
  78. CALL increase_salaries_by_country("Germany");
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement