从两个不同的表中得到不同的数量?

时间:2013-01-22 21:21:11

标签: database oracle

我正在尝试用oracle写一个查询。

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

以下是一个例子:

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

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

我该怎么办?我试图做嵌套选择等等但似乎无法让它工作。

1 个答案:

答案 0 :(得分: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但另一个没有但你不知道哪个表有额外名称的情况(假设你想说另一个表) cnt

name为0 {/ 1}
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

中看到