从现有结果集中获取COUNT个

时间:2018-11-01 01:31:06

标签: sql

我有基于此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(*)”? ...似乎不得不浪费时间再次将它们重新收集,只是为了能够计算行数。 :)

1 个答案:

答案 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,但可能是其他数据库的选择。