使用多个选择语句计算行数

时间:2015-07-22 16:13:21

标签: sql database oracle select count

目的是从多个(总共9个)SELECT语句中计算行数,并在PHP页面上显示应用程序中的行计数。使用Oracle 11g db

不要在意这里选择任何内容 - 只需要行数。

我找不到使用Oracle计算行数和使用Select语句的好方法。

使用Multiple Selects和Oracle计算行数然后在PHP页面上显示的最佳方法是什么?

请提供示例

这就是我所拥有的,但这样做了9次

$query  = oci_parse($conn, "SELECT ID"
. " FROM TABLE A"
. " WHERE (FieldX = 'N' AND FieldY = 'Y' AND FieldZ = 'Y')");

oci_execute($query) or die(oci_error($query));
oci_fetch_all($query, $array);
unset($array);
$numberofrows1 = oci_num_rows($query); 

如何才能提高效率呢?

我尝试使用已编入索引的字段或SELECT ...

中的PK

2 个答案:

答案 0 :(得分:0)

此:

$query  = oci_parse($conn, "SELECT COUNT( * ) the_count"
. " FROM TABLE a"
. " WHERE FieldX = 'N'"
. " AND FieldY   = 'Y'"
. " AND FieldZ   = 'Y'");

oci_execute($query) or die(oci_error($query));
oci_fetch_all($query, $array);

将返回一行,其中一列名为THE_COUNT,其中包含表A中与指定条件匹配的行数。

答案 1 :(得分:0)

如果您正在寻找FieldX,Y和Z的所有可能组合,您可以使用:

select pvt.*
  from (select FieldX, FieldY, FieldZ from a)
  PIVOT ( count(*) cnt
    FOR ( FieldX, FieldY, FieldZ)
     IN ( ('N', 'N', 'N') as N_N_N
        , ('N', 'N', 'Y') as N_N_Y
        , ('N', 'Y', 'N') as N_Y_N
        , ('N', 'Y', 'Y') as N_Y_Y
        , ('Y', 'N', 'N') as Y_N_N
        , ('Y', 'N', 'Y') as Y_N_Y
        , ('Y', 'Y', 'N') as Y_Y_N
        , ('Y', 'Y', 'Y') as Y_Y_Y )
        ) pvt

您可能希望稍微重命名列,但它会返回一行,其中的行对应于FieldX,FieldY和FieldZ的每种可能组合的计数。

如果在子选择中包含其他列,您将获得按其他列分组的计数。