我在另一张表中有公司表和属于这些公司之一的员工表。
我试图获得用户选择查看详细信息的公司薪水的平均值。
在我的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;
}
}