计算重复字段上的连接结果

时间:2012-11-06 10:46:04

标签: 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    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 个答案:

答案 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 JOININNER 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