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种类型,赢得,投资组合或被动。我想在一个结果集中得到每个的总和(金额)。上面的代码只选择获得类型的总数,但我无法弄清楚如何获得其他两种类型。谢谢你的帮助。
答案 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);