Mysql 重复字段上联接的计数结果

Mysql 重复字段上联接的计数结果,mysql,join,count,distinct,Mysql,Join,Count,Distinct,我有一个包含重复列值的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

我有一个包含重复列值的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
我想计算表2中的所有数字,它们是表1中不同代码的子字符串 i、 e.结果应为:

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

感谢您的帮助

我不太喜欢使用“内部连接”语法,我更喜欢在数据上使用更干净的隐式连接

select
  count(*)
from
  npanxxsmall n, phone_numbers p
where
  substr(n.code, 1, 6) = substr(p.number, 1, 6);
让我知道这是否有效

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

使用
左连接
内部连接
,具体取决于您是否需要频率为0的行。我所做的一切基本上就是使用
%
通配符运行
类似的
as连接条件。它可以对大型数据集的性能产生影响,但可以帮助您开始。它正在处理我的测试数据

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)

让我知道它是否有效

好的,我已经开始工作了,查询速度非常快

挑选

不同的A.code作为代码, B.计算为频率 从表1中作为

内连接(

选择substr(数字,1,6)作为子数字,选择count(1)作为计数 来自表2 按子对象分组(编号,1,6) ) 作为A.code=B.subnumber上的B

i、 e。 从表2中选择编号和编号频率
然后从表1中加入不同的代码实际上返回的结果是表1中代码的频率,但我想要的是表1中代码的子字符串(1,6)的数字频率更正:表2中代码的子字符串(1,6)的数字频率结果与上面robin的解相同,返回的结果是表1中代码的频率。你是对的,我修改了它,只是给出了计数,而不是频率。