Загрузка данных


-- 1
SELECT
  full_name,
  hire_date,
  YEAR(hire_date) AS hire_year,
  MONTH(hire_date) AS hire_month,
  WEEKDAY(hire_date) AS hire_weekday
FROM employees;

-- 2
SELECT
  DATE_FORMAT(hire_date, '%Y-%m') AS hire_month,
  COUNT(*) AS total_hired
FROM employees
GROUP BY hire_month
ORDER BY total_hired DESC;

-- 3
SELECT *
FROM attendance
WHERE DATE(check_in) = '2025-04-11';

-- 4
SELECT *
FROM employees
WHERE hire_date >= CURDATE() - INTERVAL 60 DAY;

-- 5
SELECT
  e.full_name,
  a.check_in
FROM attendance a
JOIN employees e ON a.employee_id = e.id
WHERE DATE(a.check_in) = CURDATE()
  AND a.check_out IS NULL;

-- 6
SELECT
  full_name,
  hire_date,
  TIMESTAMPDIFF(MONTH, hire_date, CURDATE()) AS full_months_worked
FROM employees;

-- 7
SELECT
  id,
  employee_id,
  check_in,
  check_out,
  ROUND(TIMESTAMPDIFF(SECOND, check_in, check_out) / 3600.0, 1) AS hours_worked
FROM attendance;

-- 8
SELECT
  id,
  employee_id,
  DATE_FORMAT(check_in, '%d.%m.%Y') AS entry_date,
  DATE_FORMAT(check_in, '%H:%i') AS entry_time
FROM attendance;

-- 9
SELECT
  CONCAT(
    full_name,
    ' работает с ',
    LPAD(DAY(hire_date), 2, '0'),
    ' ',
    CASE MONTH(hire_date)
      WHEN 1 THEN 'января'
      WHEN 2 THEN 'февраля'
      WHEN 3 THEN 'марта'
      WHEN 4 THEN 'апреля'
      WHEN 5 THEN 'мая'
      WHEN 6 THEN 'июня'
      WHEN 7 THEN 'июля'
      WHEN 8 THEN 'августа'
      WHEN 9 THEN 'сентября'
      WHEN 10 THEN 'октября'
      WHEN 11 THEN 'ноября'
      WHEN 12 THEN 'декабря'
    END,
    ' ',
    YEAR(hire_date),
    ' года'
  ) AS work_info
FROM employees;

-- 10
SELECT
  e.full_name,
  ROUND(SUM(TIMESTAMPDIFF(SECOND, a.check_in, a.check_out)) / 3600.0, 1) AS total_hours
FROM attendance a
JOIN employees e ON a.employee_id = e.id
WHERE a.check_out IS NOT NULL
  AND DATE(a.check_in) BETWEEN '2025-04-01' AND '2025-04-30'
GROUP BY e.id, e.full_name
ORDER BY total_hours DESC;

-- 11
SELECT
  e.full_name,
  a.check_in
FROM attendance a
JOIN employees e ON a.employee_id = e.id
WHERE DATE(a.check_in) = CURDATE()
ORDER BY a.check_in ASC
LIMIT 1;