Java MySQL在汇总一列时选择多行

时间:2016-05-22 14:25:16

标签: mysql sum

String sql = "SELECT TYPE, SOURCE, SUM(AMOUNT) AS AMOUNT FROM INCOME WHERE TYPE = 'EARNED' " + 
                    "AND DATE BETWEEN '" + year + "-" + month + "-" + "01' AND '" + year + "-" + month + "-" + day + "'";
            stmt = conn.createStatement();
            rs = stmt.executeQuery(sql);

我有一张收入表,其中包含所有收入,包括投资,业务,薪水等等。我想拉出每种类型的总数。我已将所有可能的收入减少为3种类型,赢得,投资组合或被动。我想在一个结果集中得到每个的总和(金额)。上面的代码只选择获得类型的总数,但我无法弄清楚如何获得其他两种类型。谢谢你的帮助。

3 个答案:

答案 0 :(得分:2)

String sql1 = "SELECT TYPE, SUM(AMOUNT) AS AMOUNT " + 
               "FROM INCOME " +  
               "WHERE DATE BETWEEN '" + year + "-" + month + "-" + "01' " + 
               "AND '" + year + "-" + month + "-" + day + "'"+
               "GROUP BY TYPE " ;
stmt = conn.createStatement();
rs = stmt.executeQuery(sql1);

此查询将为您提供每种类型(赢得,投资组合或被动)的金额总和 - 如果这些是您收入表中的3种类型

尝试以这种方式修改

答案 1 :(得分:2)

这称为条件聚合:

SELECT 
        SUM(CASE WHEN TYPE = 'EARNED' THEN AMOUNT ELSE 0 END) AS EARNED_cnt,
        SUM(CASE WHEN TYPE = 'PASSIVE' THEN AMOUNT ELSE 0 END) AS PASSIVE_cnt,
        SUM(CASE WHEN TYPE = 'PORFOLIO' THEN AMOUNT ELSE 0 END) AS PORFOLIO_cnt
FROM INCOME

答案 2 :(得分:0)

你应该将group by放在声明的末尾。

String sql = "SELECT TYPE, SOURCE, SUM(AMOUNT) AS AMOUNT
    FROM INCOME WHERE DATE BETWEEN '" +
    year + "-" + month + "-" + "01' AND '" +
    year + "-" + month + "-" + day + "' GROUP BY TYPE"; 
stmt = conn.createStatement(); 
rs = stmt.executeQuery(sql);