使用sum和group by子句的mysql

时间:2010-01-16 11:30:47

标签: mysql

我有以下代码。查询在mysql中运行良好,但在与java集成时无效。请检查代码。对于所有列都没有正确计算。请帮助。谢谢。

import java.io.*;
import java.sql.*;

public class Sum11{

    public static void main(String[] args) {

        System.out.println("Sum of the specific column!");

        Connection con = null;
         int sum1=0;
         int sum2=0;
         int sum3=0;


        try{
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection ("jdbc:mysql://localhost:3306/prathi","root","mysql");
            try{
                Statement st = con.createStatement();
                ResultSet res = st.executeQuery("SELECT  Service_ID,SUM(consumer_feedback) FROM  consumer1 group by Service_ID");
                while (res.next()){
                    int data=res.getInt(1);
                    System.out.println(data);
                    int c1 = res.getInt(2);
                    sum1 = sum1+c1;
                }
                System.out.println("Sum of column "   +sum1);

                while (res.next()){
                    int data=res.getInt(1);
                    System.out.println(data);
                    int c2 = res.getInt(1);
                    sum2 = sum2+c2;
                }
                System.out.println("Sum of column "   +sum2);

                while (res.next()){
                    int data=res.getInt(1);
                    System.out.println(data);
                    int c3 = res.getInt(1);
                    sum3 = sum3+c3;              
                }
                System.out.println("Sum of column "   +sum3);
            }// end of try inner block
            catch (SQLException s){
                System.out.println("SQL statement is not executed!");
            }
        }
        catch (Exception e){
          e.printStackTrace();
        }
    }
}

我的表格如下。

+------------+--------------+-------------------+
| Service_ID | Service_Type | consumer_feedback |
+------------+--------------+-------------------+
|         31 | Printer      |                 1 |
|         32 | Printer      |                -1 |
|         32 | Printer      |                -1 |
|         32 | Printer      |                 0 |
|         33 | Printer      |                 1 |
|         33 | Printer      |                 1 |
|         31 | Printer      |                -1 |
|         31 | Printer      |                -1 |

3 个答案:

答案 0 :(得分:2)

您有3个while (res.next())个循环处理同一个ResultSet。但是,第一个while循环将遍历所有行,最后2个while循环将不执行任何操作(因为此时res.next()将为false)。

如果你能解释为什么你有3个循环以及你想要做什么,我们可以告诉你代码有什么问题。

答案 1 :(得分:0)

我可能错了,但GROUP BY子句也不应该有HAVING子句吗?

答案 2 :(得分:0)

在我看来,好像你会SUM两次进行,一次进入SQL,一次进入Java

你的来源很难阅读。

为什么在while (res.next())之间没有初始化res三次false? 一旦它在第一个循环中返回{{1}},对于其他循环就不会这样......

如果这还没有帮助,请重新格式化您的Java代码。