本人有1个表,存放的是tid-用户id,day-使用日期,app_id-使用的软件的id,
现在已经查出了当天使用每个软件的总人数:SELECT b.app_id,b.`day`,COUNT(b.tid) as 当天使用此软件的人数 FROM ana_user_running_application AS b GROUP BY b.app_id,b.`day`
和当天使用软件的总人数:SELECT b.`day`,COUNT(DISTINCT b.tid) as 当天使用软件的人数 FROM ana_user_running_application AS b GROUP BY b.`day`
现在想求这两个查询结果的比值,即当天使用这软件人数/当天总人数
由于2个group by 条件不一样,所以不能用sql语句,现在想到了haspmap的方法,将第1个表的结果放到map里,但是相除的代码不会写,求指点
int numberOfColumns = rsmd.getColumnCount(); // 得到数据集的列数
while (rs.next()) {
for (int j = 1; j < numberOfColumns + 1; j++) {
System.out.print(rsmd.getColumnName(j) + “\t”
+ rs.getObject(j) + “\t” );
key = (int) rs.getObject(j);
value = (int) rs.getObject(j + 1);
map.put(key, value);
}
现在已经查出了当天使用每个软件的总人数:SELECT b.app_id,b.`day`,COUNT(b.tid) as 当天使用此软件的人数 FROM ana_user_running_application AS b GROUP BY b.app_id,b.`day`
和当天使用软件的总人数:SELECT b.`day`,COUNT(DISTINCT b.tid) as 当天使用软件的人数 FROM ana_user_running_application AS b GROUP BY b.`day`
现在想求这两个查询结果的比值,即当天使用这软件人数/当天总人数
由于2个group by 条件不一样,所以不能用sql语句,现在想到了haspmap的方法,将第1个表的结果放到map里,但是相除的代码不会写,求指点
int numberOfColumns = rsmd.getColumnCount(); // 得到数据集的列数
while (rs.next()) {
for (int j = 1; j < numberOfColumns + 1; j++) {
System.out.print(rsmd.getColumnName(j) + “\t”
+ rs.getObject(j) + “\t” );
key = (int) rs.getObject(j);
value = (int) rs.getObject(j + 1);
map.put(key, value);
}
解决方案
40
假如要用程序处理,建议你这样:
1. 用两个map,分别存储第一次和第二次查询结果。两个map的key要相同,例如是数据库的主键或其他的唯一键;
2. 用for循环遍历map,每次从两个map里取出相同key的value,即可相除。
另外,版里高手很多,建议你把建表语句贴出来,说不定高手们能在一个SQL语句里搞定你的需求。
1. 用两个map,分别存储第一次和第二次查询结果。两个map的key要相同,例如是数据库的主键或其他的唯一键;
2. 用for循环遍历map,每次从两个map里取出相同key的value,即可相除。
另外,版里高手很多,建议你把建表语句贴出来,说不定高手们能在一个SQL语句里搞定你的需求。