Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Oracle选择以获取摘要_Sql_Oracle_Select_Group By_Summary - Fatal编程技术网

Sql Oracle选择以获取摘要

Sql Oracle选择以获取摘要,sql,oracle,select,group-by,summary,Sql,Oracle,Select,Group By,Summary,假设我有两个数据库表T1和T2。T1中有一些列C1,还有一些列的值,比如1、1、2、2、3、null、null。T2有C2列,其中有值,比如1、1、2、4、5、5、null。我希望获得这两列的摘要,即在一个查询中,如果可能的话,了解包含的每个null值在两个列的组合中出现的次数。在本例中,1发生4次,2发生4次,3和4发生一次,5发生两次,null发生3次。 我事先不知道列中所有可能的值。在union all查询的顶部需要一个group by: 在union all查询的顶部需要一个group

假设我有两个数据库表T1和T2。T1中有一些列C1,还有一些列的值,比如1、1、2、2、3、null、null。T2有C2列,其中有值,比如1、1、2、4、5、5、null。我希望获得这两列的摘要,即在一个查询中,如果可能的话,了解包含的每个null值在两个列的组合中出现的次数。在本例中,1发生4次,2发生4次,3和4发生一次,5发生两次,null发生3次。 我事先不知道列中所有可能的值。

在union all查询的顶部需要一个group by:

在union all查询的顶部需要一个group by:


根据您的表大小、数据分布以及可能最终在C1和C2上可用的索引,您可能希望通过使用如下查询获得更好的性能,因为Oracle不必构建两个表的完全并集

SELECT C, SUM(N) FROM
(
    SELECT C1 AS C, COUNT(*) AS N FROM T1 GROUP BY C1
    UNION ALL
    SELECT C2, COUNT(*) FROM T2 GROUP BY C2
)
GROUP BY C;

话虽如此,YMMV。因此,如果这很关键,我建议您仔细检查查询执行计划,以便为您的特定情况选择正确的解决方案。

根据您的表大小、数据分布以及可能最终在C1和C2上可用的索引,您可能希望通过使用以下查询获得更好的性能:,因为Oracle不必构建两个表的完全并集

SELECT C, SUM(N) FROM
(
    SELECT C1 AS C, COUNT(*) AS N FROM T1 GROUP BY C1
    UNION ALL
    SELECT C2, COUNT(*) FROM T2 GROUP BY C2
)
GROUP BY C;
话虽如此,YMMV。因此,如果这很关键,我建议您仔细检查查询执行计划,以便为您的特定情况选择正确的解决方案