2 回答

TA贡献1942条经验 获得超3个赞
如果你真的不想在 sql 中使用聚合,你可以使用HashMap<String, Integer>. 像这样的东西:
Map<String, Integer> aggResult = new HashMap<>();
while (rs.next()) {
String name = rs.getString(NAME_INDEX); //NAME_INDEX - name column index
int value = rs.getInt(VALUE_INDEX); //VALUE_INDEX - value column index
aggResult.merge(name, value, Integer::sum);
//if you dont have java8 use this "if":
/*
if (aggResult.containsKey(name)) {
Integer sum = aggResult.get(name);
aggResult.put(name, sum + value);
} else {
aggResult.put(name, value);
}
*/
}
//test output:
aggResult.forEach((key, value) -> System.out.println(key + ": " + value));
也许您需要TreeMap(有或没有比较器)来代替HashMap对来自 ResultSet 或其他东西的值的顺序、空值检查。

TA贡献1871条经验 获得超8个赞
必须涉及聚合函数,并且查询“没有聚合的聚合”没有任何魅力
有了这个下面的查询就可以了。我使用 sum 是因为您的 o/p 实际上看起来不像计数数据,而是已计数记录的总和
SELECT NAME, SUM(*) FROM TABLE GROUP BY NAME
添加回答
举报