比较两列并计算结果行

时间:2019-07-20 20:35:42

标签: sql sqlite

我想计算sqlite文件的第一列和最后一列对于数据集中的每一行相同的次数。数据集有16+百万行,效率非常重要。

我尝试过:

SELECT * FROM tab WHERE [0] = [3]

但是它不起作用。可能是因为它会将每行的第一列与同一行的最后一列进行比较。

假设这是我的数据集:

0        |1       |2        |3       |
--------------------------------------
2005:67  |ytg     |6utgjgt  |786:09  |
2005:903 |467     |009      |2005:67 |
2005:444 |355     |785      |2005:450|
2005:450 |355     |785      |N/A     |
2005:934 |467     |009      |N/A     |
2005:000 |355     |785      |2005:450|
2005:987 |355     |785      |2005:450|
--------------------------------------

输出应为:

0        |1       |2        |3       |4       |
-----------------------------------------------
2005:67  |ytg     |6utgjgt  |786:09  |1       |
2005:450 |355     |785      |N/A     |3       |
2005:934 |467     |009      |N/A     |0       |
-----------------------------------------------

第4列与其中某一行的第一列相同的行被删除但被计数。 (行的第四列不可能与多于一行的第一列相同。并且每一行的第一列的值都相同) 大家可以帮我吗?我是菜鸟,非常感谢您提供一些解释以及代码。谢谢

1 个答案:

答案 0 :(得分:1)

不存在:

select t.*,
  (select count(*) from tab where [3] = t.[0]) [4] 
from tab t
where not exists (
  select 1 from tab 
  where [0] = t.[3]
)

请参见demo
结果:

| 0        | 1   | 2       | 3      | 4   |
| -------- | --- | ------- | ------ | --- |
| 2005:67  | ytg | 6utgjgt | 786:09 | 1   |
| 2005:450 | 355 | 785     | N/A    | 3   |
| 2005:934 | 467 | 009     | N/A    | 0   |