Advertisement
JmihPodvalbniy

Untitled

Apr 22nd, 2024 (edited)
42
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 5.04 KB | Software | 0 0
  1. CREATE DATABASE industrial_1;
  2.  
  3. USE industrial_1;
  4.  
  5. CREATE TABLE departments (
  6. id INT IDENTITY(1,1) PRIMARY KEY,
  7. name VARCHAR(255)
  8. );
  9.  
  10. CREATE TABLE customers (
  11. id INT IDENTITY(1,1) PRIMARY KEY,
  12. name VARCHAR(255),
  13. email VARCHAR(255)
  14.  );
  15.  
  16. CREATE TABLE employees (
  17. id INT IDENTITY(1,1) PRIMARY KEY,
  18. name VARCHAR(255),
  19. department_id INT REFERENCES departments(id),
  20. salary FLOAT
  21. );
  22.  
  23. CREATE TABLE orders (
  24. id INT IDENTITY(1,1) PRIMARY KEY,
  25. customer_id INT REFERENCES customers(id),
  26. order_date DATE,
  27. total_amount FLOAT
  28. );
  29. =========================================================
  30. USE industrial_1;
  31.  
  32. INSERT INTO departments (name)
  33. VALUES
  34. ('IT'),
  35. ('Sales'),
  36. ('Marketing');
  37.  
  38. INSERT INTO customers (name, email)
  39. VALUES
  40. ('Алексей', 'alexey@example.com'),
  41. ('Елена', 'elena@example.com'),
  42. ('Дмитрий', 'dmitriy@example.com'),
  43. ('Ольга', 'olga@example.com');
  44.  
  45. INSERT INTO employees (name, department_id, salary)
  46. VALUES
  47. ('Иван Иванов', 1, 50000),
  48. ('Петр Петров', 2, 60000),
  49. ('Анна Сидорова', 1, 45000),
  50. ('Мария Кузнецова', 3, 70000),
  51. ('Сергей Смирнов', 2, 55000);
  52.  
  53. INSERT INTO orders (costumer_id, order_date, total_amount)
  54. VALUES
  55. (1, '2024-10-01', 1000),
  56. (2, '2024-10-15', 2500),
  57. (3, '2024-10-22', 800),
  58. (4, '2024-09-18', 1200),
  59. (5, '2024-10-29', 3000);
  60. =======================================================
  61. --1)Выведите список всех сотрудников и их зарплаты, отсортированных по зарплате в порядке убывания.
  62. USE industrial_1;
  63.  
  64. SELECT name, salary
  65. FROM employees
  66. ORDER BY salary DESC;
  67.  
  68. --2)Найдите количество заказов каждого клиента и отсортируйте результаты по количеству заказов в порядке убывания.
  69. USE industrial_1;
  70.  
  71. SELECT customers.name AS 'Заказчик',
  72. COUNT(orders.id)AS 'Заказы'
  73. FROM customers
  74. LEFT JOIN orders
  75. ON customers.id=orders.customer_id
  76. GROUP BY customers.name ORDER BY 'Заказы' DESC;
  77.  
  78. --3)Выведите список всех отделов и среднюю зарплату сотрудников в каждом отделе.
  79. USE industrial_1;
  80.  
  81. SELECT departments.name AS 'Отделы',
  82. AVG(employees.salary) AS 'Средняя зп'
  83. FROM departments
  84. LEFT JOIN employees
  85. ON departments.id = employees.department_id
  86. GROUP BY departments.name
  87.  
  88. --4)Найдите клиентов, которые не сделали ни одного заказа.
  89. USE industrial_1;
  90.  
  91. SELECT DISTINCT customers.name AS 'Заказчик'
  92. FROM customers
  93. LEFT JOIN orders
  94. ON customers.id = orders.customer_id
  95. WHERE orders.id IS NULL;
  96.  
  97. --5)Выведите список всех сотрудников, работающих в отделе "Sales", и их зарплаты.
  98. USE industrial_1;
  99.  
  100. SELECT DISTINCT employees.name AS 'Заказчик', employees.salary AS 'Зп'
  101. FROM employees
  102. INNER JOIN departments
  103. ON employees.department_id = departments.id
  104. WHERE departments.name = 'Sales';
  105.  
  106. --6)Найдите самый дорогой заказ каждого клиента.
  107. USE industrial_1;
  108.  
  109. SELECT customers.name AS 'Заказчик',
  110. MAX(orders.total_amount) AS 'Маx_Стоимость'
  111. FROM customers
  112. LEFT JOIN orders ON customers.id = orders.customer_id
  113. GROUP BY customers.name;
  114.  
  115. --7)Выведите список всех клиентов, которые сделали заказы в последние 30 дней.
  116. USE industrial_1;
  117.  
  118. SELECT customers.name AS 'Заказчик'
  119. FROM customers
  120. JOIN orders
  121. ON customers.id = orders.customer_id
  122. WHERE orders.order_date >= GETDATE() - 30;
  123.  
  124. --8)Найдите отделы, в которых работает более 5 сотрудников.
  125. --Вместо (пяти) больше (нуля), чтобы работал запрос.
  126. USE industrial_1;
  127.  
  128. SELECT departments.name AS 'Отдел'
  129. FROM departments
  130. JOIN employees ON departments.id = employees.department_id
  131. GROUP BY departments.name
  132. HAVING COUNT(employees.id) > 0;
  133.  
  134. --9)Выведите список всех клиентов и общую сумму их заказов.
  135. USE industrial_1;
  136.  
  137. SELECT customers.name AS 'Заказчик',
  138. SUM(orders.total_amount) AS 'Сумма заказа'
  139. FROM customers
  140. LEFT JOIN orders
  141. ON customers.id = orders.customer_id
  142. GROUP BY customers.name;
  143.  
  144. --10)Найдите сотрудников, чьи зарплаты выше средней зарплаты в их отделе.
  145. USE industrial_1;
  146.  
  147. SELECT employees.name AS 'Сотрудник',
  148. employees.salary AS 'Зарплата сотрудника',
  149. departments.name AS 'Отдел',
  150. da.average_salary AS 'Средняя зп в отделе'
  151. FROM employees
  152. JOIN departments ON employees.department_id = departments.id
  153. JOIN (
  154. SELECT department_id, AVG(salary) AS average_salary
  155. FROM employees
  156. GROUP BY department_id
  157. )
  158. da ON employees.department_id = da.department_id
  159. WHERE employees.salary > da.average_salary;
  160.  
  161.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement