java获取所选类别中所有实体的平均值

时间:2017-02-16 00:28:05

标签: java mysql sqlite jsp java-ee

我在另一张表中有公司表和属于这些公司之一的员工表。
我试图获得用户选择查看详细信息的公司薪水的平均值。
在我的JSP中,我正在显示所选公司的所有员工,而在底部,我试图显示所有员工的平均工资。
正如您所看到的,有一个sum命令正在总结for循环中每个迭代的工资,然后吐出平均值。
我想在我的companyDAO或company.java文件中执行此操作,并在此处调用方法(我正在做,但我得到零。)。

<%@page import="data.Employee"%>
<%@page import="data.Company"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<jsp:useBean id="company" type="data.Company" scope="request"/>

<% List<Employee> employees = company.getEmployees();
   double sum=0.0;
%>
<table border="1">    
    <tr>
        <td>ID</td>
        <td>Name</td>                        
        <td>Salary</td>             
    </tr>        
    <%
        for(int i=0; i <employees.size(); i++){
            sum += employees.get(i).getSalary();
    %> 
        <tr>      
            <td><%=employees.get(i).getId()%></td>
            <td><%=employees.get(i).getNom()%></td>                
            <td><%=employees.get(i).getSalary()%></td>  
        </tr>
    <% } %>
</table> 

//get the average salary of all employees ::: This is returning the average
<p>Average salary of all employees in this company:<%=sum/(double)employees.size()%> </p>
//this is returning zero.       
<p> New average method: <%=company.getAverageSalary()%></p>

companyDAO.java

public static CompanyretrieveById(int id) {         
        EntityManager em = GestionFactory.factory.createEntityManager();
        Company company = em.find(Company.class, id);
        em.close();                 
        return company;
    }
public static List<Company> getAll() {
    EntityManager em = GestionFactory.factory.createEntityManager();
    Query q = em.createQuery("SELECT e.company, AVG(e.salary) FROM Employee e GROUP BY e.company");

    // each list entry contains a tuple (company, avgSalary)
    List<Object[]> results = q.getResultList();

    List<Company> companiesList = new LinkedList<>();
    for (Object[] entry : results) {
        Company company = (Company) entry[0]; // contains "e.company"
        Double avgSalary = (Double) entry[1]; // contains "AVG(e.salary)"
        company.setAverageSalary(avgSalary);
        companiesList.add(company);
    }

    return companiesList;
}

company.java

@Entity
public class Company implements Serializable {

    // ...

    @Transient
    private double averageSalary;

    public void setAverageSalary(double averageSalary) {
        this.averageSalary = averageSalary;
    }

    public double getAverageSalary() {
        return averageSalary;
    }
}

0 个答案:

没有答案