Java Sql“选择总和”给出不正确的值

时间:2018-08-01 10:31:36

标签: java sql select sum

我没有Java方面的经验,因此一直困扰于此问题,并且数周无法弄清原因。我有一个SQL查询,用于按“名称”列进行选择,计数和分组。接下来,在'while(rs.next())'中,我试图选择另外两列的总和,这是一个名为“ kolicina”的列和一个名为“ cena”的列,此处是该方法的代码:

public ArrayList<Artikli> getSum(String date){  
        ArrayList<Artikli> list = new ArrayList<Artikli>();
        String query = "select name, count(name) as count from izvestaj where dateZat = '"+date+"' group by name";  
        try {
            rs = st.executeQuery(query);
            while(rs.next()){
                Artikli art = new Artikli();
                art.name = rs.getString("name");
                String q = "select sum(kolicina) as total from izvestaj where name = '"+art.name+"' and dateZat = '"+date+"'";
                rs2 = st2.executeQuery(q);
                while(rs2.next()){
                    art.kolicina = rs2.getInt("total");
                }
                String q1 = "select sum(cena) as total1 from izvestaj where name = '"+art.name+"' and dateZat = '"+date+"'";
                rs3 = st3.executeQuery(q1);
                while(rs3.next()){
                    art.cena = rs3.getInt("total1")/rs.getInt("count");
                }
                list.add(art);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }   
        return list;
    }

问题是第二个查询返回正确的列kolicina的总和,但是第三个查询返回的结果集是总和乘以计数值(从第一个查询中得出的...这就是为什么我将其除以计数最后),但实际上并没有返回正确的数量。 “ cena”列实际上是英语的价格,因此它似乎正在平均价格中,而不是将其与记录数相乘...我仔细检查了插入查询,它们很好,所以我确定我插入了正确的值。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

不是每个名称发出两个不同的查询,而是发出

select name,
       sum(kolicina) as total,
       sum(cena) as total1
  from izvestaj
 where name is not null and
       dateZat = ?
 group by name

(re。questino标记:请阅读PreparedStatements以及如何设置参数化查询以正确保护自己免受SQL注入。)

(我认为您甚至可以跳过第一个查询,因为其结果也将包含在该查询的结果中。)