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

テーブル1の個別のコードの部分文字列であるテーブル2のすべての数値をカウントしたい。つまり、結果は

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 JOINまたはを使用します。基本的に、ワイルドカードを使用して as join 条件を実行するだけでした。INNER JOINfrequency = 0LIKE%

于 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.コードとしてのコード、B.Counts AS 周波数 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 に答える