2

我有一个包含重复列值的 table1

表格1

id   code
1   201202  0000    1111
2   201202  0000    9999
3   201203  0000    9999
4   201203  0000    0999
5   201204  1000    1999
6   201204  2000    2999
7   201205  3000    3999
8   201205  4000    4999
9   201205  5000    5999

表 2

id   numbers
1   2012020010  
2   2012024929  
3   2012033838
4   2012052434
5   2012052229
6   2012052232

我想计算 table2 中作为表 1 中不同代码子串的所有数字,即结果应该是

code   frequency
201202   2
201203   1
201205   3

我已经能够获得每个代码的所有数字,但无法弄清楚如何计算它们

SELECT DISTINCT table1.code , table1.id, table2.number AS ph_npa, count( * )
FROM table1
INNER JOIN table2 ON substr( table2.number, 1, 6 ) = table1.code
GROUP BY table1.number

任何帮助表示赞赏。

4

4 回答 4

1

我并不是真正使用“内连接”语法的人,而是更喜欢在数据上使用看起来更简洁的隐式连接。

select
  count(*)
from
  npanxxsmall n, phone_numbers p
where
  substr(n.code, 1, 6) = substr(p.number, 1, 6);

让我知道这个是否奏效!

于 2012-11-06T10:51:35.523 回答
1
SELECT t1.code, COUNT(*) AS frequency
FROM table_one AS t1
LEFT JOIN table_two AS t2
ON t2.numbers LIKE CONCAT(t1.code, '%')
GROUP BY t1.code

使用LEFT JOININNER JOIN取决于您是否想要行frequency = 0。我所做的基本上就是使用通配符运行LIKEas 连接条件。%

于 2012-11-06T10:58:14.540 回答
1

试试下面的。它可能会对大型数据集产生性能影响,但可以帮助您入门。它正在处理我的测试数据。

SELECT SUBSTR(t2.numbers, 1,6) AS CODE, COUNT(*) AS frequency
FROM table_2 t2
WHERE SUBSTR(t2.numbers, 1,6) IN (SELECT t1.code FROM table_1 t1)
GROUP BY SUBSTR(t2.numbers, 1,6)

让我知道它是否有效!

于 2012-11-06T19:46:24.980 回答
0

好的,我开始工作了,查询速度超级快

选择

DISTINCT A.code as code, B.Counts AS frequency FROM table1 AS A

内部联接 (

SELECT substr(number, 1, 6) AS subnumber, count(1) AS Counts FROM table2 GROUP BY substr(number, 1, 6) ) AS B ON A.code = B.subnumber

即从表2中选择数字的数量和频率,然后用不同的代码形式加入表1

于 2012-11-06T20:33:25.830 回答