【问题标题】:counting rows in select clause with DB2使用 DB2 计算 select 子句中的行数
【发布时间】:2013-09-07 22:05:15
【问题描述】:

我想查询一个 DB2 表,并在单独的列中获取查询的所有结果以及 select 语句返回的所有行。

例如,如果表包含列 'id' 和 'user_id',假设有 100 行,则查询结果将以以下格式显示:(id) | (user_id) | 100.

我不想在查询中使用“分组依据”子句。 (以防您对我的要求感到困惑)另外,我在这里找不到示例:http://mysite.verizon.net/Graeme_Birchall/cookbook/DB2V97CK.PDF

另外,如果有更有效的方法来获得这两个结果(值 + 计数),我会欢迎任何想法。我的环境使用 zend 框架 1.x,它没有用于 DB2 的 ODBC 适配器。 (参见问题http://framework.zend.com/issues/browse/ZF-905。)

【问题讨论】:

    标签: sql zend-framework select db2


    【解决方案1】:

    如果我明白你的要求,那么答案应该是

    select t.*, g.tally
      from mytable t,
           (select count(*) as tally
              from mytable
           ) as g;
    

    如果这不是你想要的,那么请给出一个期望输出的实际例子,假设有 3 到 5 条记录,这样我们就能准确地看到你想要的。

    【讨论】:

    • 这是我在结果集方面所寻找的;感谢你的回答。但是,我希望有一个更有效的解决方案,它使用分析函数,而不是执行 2 次选择。
    • 是什么让您觉得 OLAP 函数在幕后做得更少?这是便携式的。我将提供我喜欢的第二种方法。对于其他任何事情,您都必须指出您正在使用哪个 DB2 平台 - i、LUW 或 z/OS。
    【解决方案2】:

    您可以为此使用窗口/分析函数:

    select t.*, count(*) over() as NumRows
    from table t;
    

    这适用于您的任何类型的查询。

    【讨论】:

    • 试过了,得到了这个错误——它似乎在抱怨“over()”:消息:[SQL0104] 令牌(无效。有效令牌:,FROM INTO。原因...... . . : 在记号 (.记号 ( 不是有效记号该语句,但该语句的语法在此之前似乎是有效的。
    猜你喜欢
    • 1970-01-01
    • 2014-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-12
    • 2019-10-06
    相关资源
    最近更新 更多