我有基于此SELECT语句的结果集:
"SELECT ca.mem_no, me.mem_surname, me.mem_first_name, " +
"lcc.call_cat, ca.call_location, ca.caller_name, lsc.call_sub_cat, ca.call_id, " +
"call_date_start, ca.call_note_start, ca.call_date_end, ca.call_duration, lcs.call_status, " +
"lca.call_action, lcr.call_res, ca.call_note_res\n" +
"FROM tblCall ca\n" +
"INNER JOIN tlkpCallStatus lcs on lcs.callstatus_id = ca.callstatus_id\n" +
"INNER JOIN tlkpCallAction lca on lca.callaction_id = ca.callaction_id\n" +
"INNER JOIN tlkpCallResolution lcr on lcr.callres_id = ca.callres_id\n" +
"LEFT OUTER JOIN tlkpCallSubCategory lsc on lsc.callsubcat_id = ca.callsubcat_id\n" +
"INNER JOIN tlkpCallCategory lcc on lcc.call_cat_id = ca.call_cat_id\n" +
"LEFT OUTER JOIN tblMember me on me.mem_no = ca.mem_no\n" +
"INNER JOIN tblClient cl on cl.client_ident = me.client_ident\n" +
"WHERE me.client_ident = \'AVA\'" +
"AND ca.call_date_start BETWEEN '2017-02-01' AND '2017-02-28'\n" +
"ORDER BY date(ca.call_date_start);\n"
;
这将rst.next()变成一个speadsheet ...我意识到我可以通过等待处理完成来获取行数,但是我在写报告之前需要行数。根据相同的JOIN和WHERE条件编写另一个获得COUNT(*)的pre sql语句。但我不想拥有一个sql语句的两个副本..
有没有办法(JAVA,Sqlite3)从现有结果集中“选择COUNT(*)”? ...似乎不得不浪费时间再次将它们重新收集,只是为了能够计算行数。 :)
答案 0 :(得分:1)
有is a way个探测JDBC ResultSet
并找出该结果集中有多少条记录。但是,这可能会导致整个结果集通过网络读取。因此,如果您确实需要查找计数,我投票赞成只运行一个单独的COUNT(*)
查询。从网络使用的角度来看,这非常便宜,因为您只是要求发送一个单一的号码。
这里还有一个SQL解决方案,不幸的是,该解决方案不适用于SQLite(尚不支持分析功能)。您可以使用以下查询:
SELECT
ca.mem_no,
me.mem_surname,
me.mem_first_name,
COUNT(*) OVER () AS total_record_count -- change here
...
FROM
也就是说,我们可以将COUNT
用作分析函数,以在运行其余原始查询的同时查找总记录数。同样,不适用于SQLite,但可能是其他数据库的选择。