sql count其中2个表中的记录几乎匹配

时间:2017-08-24 21:26:46

标签: sql oracle

我无法弄清楚如何编写SQL代码以拉出表2中出现的rownames计数,表2中的rowumber为+/- 1.例如,我会计算'Exclusive'和“流行剧集”出现在两者中,因为rownumber在彼此之内。但我不会算“热门电影”,因为差距是> 1.通常我会对表进行交互,但我只知道如何使用INTERSECT进行完全匹配。

Table 1
+------------------+-----------+
|  rowname         | rownumber |
+------------------+-----------+
| Exclusive        |         1 |
| Popular Movies   |         3 |
| New Seasons      |         7 |
| Popular Episodes |         8 |
+------------------+-----------+

Table 2
+------------------+-----------+
|   rowname        | rownumber |
+------------------+-----------+
| Exclusive        |         2 |
| Popular Episodes |         7 |
| Popular Movies   |         8 |
+------------------+-----------+

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

为什么不进行简单的加入?类似的东西:

SELECT rowname
FROM t1 JOIN t2 ON t1.rowname = t2.rowname
WHERE t1.rownumber - t2.rownumber BETWEEN -1 AND 1

只需修改名称即可。

如果您只想要数字,请选择SELECT COUNT(rowname)。

答案 1 :(得分:0)

如果您将任一表中的空白记录视为0,就像“新季”一样,如果它是1,则使用LEFT JOIN代替。

SELECT t1.rowname
  FROM table1 t1
  LEFT JOIN table2 t2 
    ON t1.rowname = t2.rowname 
 WHERE COALESCE(t1.rownumber,0) - COALESCE(t2.rownumber,0) BETWEEN -1 AND 1