我正在尝试用oracle写一个查询。
基本上我想得到两个具有相同提供者列表的表的计数。我可以单独运行查询,但不确定如何一次性完成。
以下是一个例子:
SELECT name, COUNT(name)
FROM table1
group by name
这给了我一个名单列表和旁边的计数。如果我在table2上运行相同的命令(更改from语句),它可以正常工作。我想要做的是有一个查询从table1计数并从table2的count中减去它。
我该怎么办?我试图做嵌套选择等等但似乎无法让它工作。
答案 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
中看到