2014-09-11 7 views
1

Я хотел бы выполнить следующий запрос в СогласованностиSQL Группировки и имея в последовательности

Select AVG(Salary) 
    , Count(*) 
from Employees 
group by Company 
Having AVG(Salary)> 1000 

Я пытался использовать GroupAggregators, но у меня есть проблемы с отсылая к насчитайте заработную плату, поскольку она не определена в Класс работника, но в агрегаторе:

GroupAggregator high_salary = GroupAggregator.createInstance("getDepartment" 
                , new DoubleAverage("getSalary") 
                , new GreaterFilter("DoubleAverage", 1000)); 

Как это сделать?

ответ

0

Вы должны использовать IdentityExtractor.INSTANCE вместо "DoubleAverage" в качестве значения экстрактор в GreaterFilter, так как значение, передаваемое в этот фильтр сам по себе насчитайте зарплату, а не какой-то объект со свойством «DoubleAverage».

Но если вы хотите получить зарплату, а также счетчик (который будет соответствовать вашему SQL-запросу), вам нужно будет использовать CompositeAggregator. В этом случае значение, переданное фильтру, больше не будет числом, а List, и вам нужно будет использовать ValueExtractor, который будет извлекать зарплату из этого списка. В Согласованность 12.2.1 это будет выглядеть следующим образом:

DoubleAverage<Employee> avgSalary = new DoubleAverage<>(Employee::getSalary); 
    Count<String, Employee> count = new Count<>(); 

    CompositeAggregator<String, Country> compositeAggregator = CompositeAggregator 
      .createInstance(new InvocableMap.EntryAggregator[] { avgSalary, count }); 

    ValueExtractor<Object, ? extends Double> salaryExtractor = 
      list -> ((List<Number>) list).get(0).doubleValue(); 
    Filter having = Filters.greater(salaryExtractor, 1000.0); 
    GroupAggregator<String, Country, Employee, String, List> groupAggregator = 
      GroupAggregator.createInstance(Employee::getDepartment, compositeAggregator, having); 

Это может быть сделано также в более ранних версиях, но это потребует немного больше работы для реализации salaryExtractor без использования лямбда-выражения.

 Смежные вопросы

  • Нет связанных вопросов^_^