我有一个包含重复列值的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
任何帮助表示赞赏。
答案 0 :(得分:0)
我不是真正使用“内连接”语法的人,而是喜欢在数据上使用更清晰的隐式连接。
select
count(*)
from
npanxxsmall n, phone_numbers p
where
substr(n.code, 1, 6) = substr(p.number, 1, 6);
让我知道这是否有效!
答案 1 :(得分:0)
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 JOIN
或INNER JOIN
,具体取决于您是否需要frequency = 0
行。我所做的只是基本上使用LIKE
通配符作为连接条件运行%
。
答案 2 :(得分:0)
尝试以下方法。它可以对大型数据集进行性能匹配,但会让您入门。它正在处理我的测试数据。
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)
让我知道它的工作原理!
答案 3 :(得分:0)
好吧,我让它工作,查询超快
选择
DISTINCT A.code作为代码, B.Counts AS频率 FROM table1 AS A
INNER JOIN(
SELECT substr(number,1,6)AS subnumber,count(1)AS Counts 从table2 GROUP BY substr(数字,1,6) ) AS B ON A.code = B.subnumber
即。 从表2中选择号码的数量和频率 然后加入不同的代码表格表1