Sobes.tech
Назад к вопросам
Senior
4

Модифицировать SQL: только сотрудники старше 30 лет. Затем: только отделы с более чем 100 сотрудниками.

Компании, где спрашивали
платформа офд

Ответ от нейросети

sobes.tech AI

Предположим, у нас есть две сущности: Employee и Department. Нужно сначала отфильтровать сотрудников старше 30 лет, а затем выбрать только те отделы, в которых более 100 таких сотрудников.

Пример на Java с использованием Stream API и коллекций:

import java.util.*;
import java.util.stream.*;

class Employee {
    int age;
    Department department;
    // конструктор, геттеры
}

class Department {
    String name;
    // конструктор, геттеры
}

// employees - список всех сотрудников
List<Employee> employees = ...;

// Фильтруем сотрудников старше 30
List<Employee> filteredEmployees = employees.stream()
    .filter(e -> e.getAge() > 30)
    .collect(Collectors.toList());

// Группируем по отделам и считаем количество сотрудников
Map<Department, Long> deptCounts = filteredEmployees.stream()
    .collect(Collectors.groupingBy(Employee::getDepartment, Collectors.counting()));

// Отбираем отделы с более чем 100 сотрудниками
Set<Department> largeDepartments = deptCounts.entrySet().stream()
    .filter(entry -> entry.getValue() > 100)
    .map(Map.Entry::getKey)
    .collect(Collectors.toSet());

// Итог: сотрудники старше 30, работающие в больших отделах
List<Employee> result = filteredEmployees.stream()
    .filter(e -> largeDepartments.contains(e.getDepartment()))
    .collect(Collectors.toList());

Такой подход позволяет последовательно применить оба условия и получить нужный результат.