gpt4 book ai didi

java - 循环遍历结果集以按组生成平均值

转载 作者:行者123 更新时间:2023-12-02 06:54:14 25 4
gpt4 key购买 nike

背景:我正在尝试使用 Apache Commons Math 确定救护车的统计数据。我能够对一辆救护车进行非常基本的单变量统计,但是当我想要确定车队中所有救护车的统计数据时,我陷入了困境。

目标:我的目标是使用 JDBC 生成基本结果集,然后将信息解析为统计信息。例如,我想获取结果集,使其看起来像一个显示救护车的表格,将 2014 年的平均值、2015 年的平均值作为标题。表格详细信息将显示每辆救护车和每个标题的平均值

<table>
<tr><th>ambulance</th><th>average response time for year 2014</th><th>average response time for year 2015</th></tr>
<tr><td>Medic1</td><td>62</td><td>74</td></tr>
<tr><td>Medic2</td><td>83</td><td>79</td></tr>
<tr><td>Medic3</td><td>68</td><td>71</td></tr>
</table>

尝试的伪代码:伪代码看起来像这样;1.) 为 2014 日历年的平均响应时间分配一个变量。2.) 如果日历年是 2014 年,则循环遍历结果集中的所有救护车,然后计算平均值。3.) 为 2015 日历年的平均响应时间分配一个变量。4.) 循环遍历所有救护车,如果日历年是 2015 年,则计算平均值。5.) 输出救护车、2014年平均响应时间、2015年平均响应时间

评论:这将是一个好的开始。至少可以提供逻辑和格式来进行更复杂的分析,例如确定逐年差异。但我被困住了。我不知道如何对每辆救护车进行迭代来生成平均值。

我能够编写 SQL 查询来生成每辆救护车的平均值。但我想使用 Apache Commons Math,因为它提供了 Skew、Kurtosis 和其他度量。您在本段上方看到的是更复杂内容的简化示例。

Java 代码:

package EMSResearch;

import java.sql.*;
import org.apache.commons.math3.stat.descriptive.DescriptiveStatistics;

public class EMSResearch
{

public static void main(String[] args)
{
Connection conn = null;
Statement stmt = null;
try
{
conn = DriverManager.getConnection("jdbc:sqlserver://MyDatabase;database=Emergencies;integratedsecurity=false;user=MyUserName;password=MyPassword");
stmt = conn.createStatement();
String strSelect = "SELECT EmergencyID, YearOfCall, ResponseTime, Ambulance";
ResultSet rset = stmt.executeQuery(strSelect);

DescriptiveStatistics ds = new DescriptiveStatistics();
/*the following code does the job of generating average response time for Medic1 for year 2015. But I want it to loop through and get all the ambulances for year 2015*/
while (rset.next())
{
if (rset.getString("Ambulance").equals("Medic1") && rset.getInt("YearOfCall") == 2015)
{
String event = rset.getString("I_EventNumber");
int year = rset.getInt("YearOfCall");
int responseTime = rset.getInt("ResponseTime");
String truck = rset.getString("Ambulance");
ds.addValue(responseTime);
}
}
System.out.println("mean average value " + ds.getMean());


} catch (SQLException ex)
{
ex.printStackTrace();
} finally
{

最佳答案

类似这样的事情可能会有所帮助。如果你使用 map 来存储所有年份和卡车的所有数据,我认为你可以获得你需要的一切。该代码尚未完全成熟,但我认为它在概念上非常不错。

  private static void getstats(ResultSet rset) throws SQLException {
Map<Integer, Map<String, DescriptiveStatistics>> stats = new HashMap<>();
while (rset.next()) {

String event = rset.getString("I_EventNumber");
int year = rset.getInt("YearOfCall");
int responseTime = rset.getInt("ResponseTime");
String truck = rset.getString("Ambulance");
if (stats.containsKey(year)) {
Map<String, DescriptiveStatistics> get = stats.get(year);
if (get.containsKey(truck)) {
get.get(truck).addValue(responseTime);
} else {
Map<String, DescriptiveStatistics> newmap = new HashMap<>();
DescriptiveStatistics newDs = new DescriptiveStatistics();
newDs.addValue(responseTime);
newmap.put(truck, newDs);
}

} else {

Map<String, DescriptiveStatistics> newmap = new HashMap<>();
DescriptiveStatistics newDs = new DescriptiveStatistics();
newDs.addValue(responseTime);
newmap.put(truck, newDs);
stats.put(year, newmap);
}

}
for(Integer year : stats.keySet()){
for(String truck : stats.get(year).keySet()){
DescriptiveStatistics ds = stats.get(year).get(truck);
/**do stuff with the ds for this year and this truck**/

}
}

}

关于java - 循环遍历结果集以按组生成平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37462956/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com