Mysql 重复字段上联接的计数结果
我有一个包含重复列值的table1 表1Mysql 重复字段上联接的计数结果,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
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中代码的频率。你是对的,我修改了它,只是给出了计数,而不是频率。