1

我在尝试在 oracle 中编写的查询时遇到问题。

基本上我想获得两个具有相同提供程序列表的表的计数。我可以单独运行查询,但不确定如何一次性完成。

这是一个例子:

SELECT name, COUNT(name)
FROM   table1
group by name

这给了我一个名字列表和他们旁边的计数。如果我在 table2 上运行相同的命令(更改 from 语句),它工作正常。我想要做的是有一个从table1 中获取计数并从table2 中减去它的查询。

我该怎么做?我曾尝试进行嵌套选择等,但似乎无法使其正常工作。

4

1 回答 1

4

假设name两个表中的值相同的一种选择是

SELECT t1.name, t2.cnt - t1.cnt diff
  FROM( SELECT name, COUNT(name) cnt 
          FROM table1
         group by name ) t1,
      ( SELECT name, COUNT(name) cnt 
          FROM table2
         group by name ) t2
 WHERE t1.name = t2.name

如果您想处理一个表具有而另一个表name没有但您不知道哪个表具有额外名称的情况(并假设您想说另一个表的 acnt为 0 name

SELECT coalesce(t1.name, t2.name) name, 
       nvl(t1.cnt, 0 ) t1_cnt,
       nvl(t2.cnt, 0 ) t2_cnt,
       nvl(t2.cnt,0) - nvl(t1.cnt,0) diff
  FROM( SELECT name, COUNT(name) AS cnt
          FROM table1
         group by table1.name ) t1
      full outer join
      ( SELECT name, COUNT(name) AS cnt
          FROM table2
         group by table2.name ) t2
      on( t1.name = t2.name )

您可以在此SQLFiddle中看到

于 2013-01-22T21:27:41.757 回答