テーブル(buf1)
g_num
------
11
テーブル(sample1)
text |code
-------------------------------------------------
(1)NBAバスケットは今シーズン熱い戦いが繰り広げられるだろう | 11
(2)戦争は映画の中でけの戦いにしてほしい | 11
(3)名探偵と言えば、ホームズ?今はコナンになるのか? | 12
テーブル(c_text)
g_code | num | word
----------------------
11 | 1100 |NBA
11 | 1100 |バスケ
11 | 1100 |MJ
11 | 1100 |ダンク
11 | 1101 |映画
11 | 1101 |監督
11 | 1102 |戦争
11 | 1102 |戦い
12 | 1200 |データベース
1.テーブル(sample1)のcodeがテーブル(buf1)のg_numと等しいレコード。
ここでは、(1)と(2)のレコードが対象となる。
2.codeとテーブル(c_text)のg_codeが等しいwordを用いて、
textを文字検索を行う(LIKEを用いて部分一致検索)を行う。
text LIKE '%'|| word ||'%'
3.textにwordが存在するnumの出現回数を数えて、最も出現回数の
高いnumをテーブル(sample1)の各レコードのnum値とする。
レコード(1)の場合、num(1100)が2回(NBAとバスケ)出現しており、
num(1102)が1回(戦い)が出現しているがnum=1100の方が出現回数が高いため
レコード(1)のnumは1100とする。
最終的欲しいのは、
text |code|num
-------------------------------------------------
NBAバスケットは今シーズン熱い戦いが繰り広げられるだろう | 11 |1100
戦争は映画の中でけの戦いにしてほしい| 11 |1102
です。
説明がわかりにくくて申し訳ございません。
なるべく一時テーブルなど作成せずに
SQL一文で処理がしたいです。
どうぞよろしくお願い致します。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
ここのカテゴリってSQLSERVERですよね?
>>text LIKE '%'|| word ||'%'
>>今SQLite
このあたりを見ると違うDBのような・・
知識不足でごめんなさい
以下のSQLでうまくいく予定ですが
長文SQLでごめんなさい
SELECT A.text,A.code,A.num From (
SELECT sample1.text,sample1.code,c_text.num,Count(*) as 出現回数
FROM sample1,buf1,c_text
WHERE sample1.code = buf1.g_num
AND sample1.code = c_text.g_code
AND sample1.text LIKE '%' + c_text.word + '%'
Group By sample1.text,sample1.code,c_text.num
) A ,( SELECT B.text,MAX(出現回数) 出現回数最大
From ( SELECT sample1.text,c_text.num,
Count(*) as 出現回数
FROM sample1,buf1,c_text
WHERE sample1.code = buf1.g_num
AND sample1.code = c_text.g_code
AND sample1.text LIKE '%'+c_text.word + '%'
Group By sample1.text,c_text.num ) as B
Group By B.text
) BB
WHERE A.text = BB.text
AND A.出現回数 = 出現回数最大
No.2
- 回答日時:
SQL Serverのバージョンが7.0以上でないとtopは使えません。
バージョンは大丈夫なのにtopが使えないとすれば、原因は
http://support.microsoft.com/default.aspx?scid=k …
の記述にある障害と同じものかもしれません。
なお、topなしでSQLを記述するのはわたしには無理そうですので他の方にお譲りします。
No.1
- 回答日時:
パズルとして面白かったのとサンプルのデータがちょっと楽しかったので、挑戦してみました。
select distinct left(s.text,10) text, s.code, c.num
from sample1 s, c_text c, buf1 b
where s.code = c.g_code and
s.code = b.g_num and
c.num = (
select top 1 c2.num
from c_text c2
where s.code = c2.g_code and
s.text like '%' + c2.word + '%'
group by c2.g_code, c2.num
order by count(*) desc, c2.num)
(結果)
text code num
-------------------- ----------- -----------
(1)NBAバスケッ 11 1100
(2)戦争は映画の中 11 1102
※制限:like演算子による一致の件数が等しくなる複数のnumがある場合、そのうちいちばん小さいnumを返す
なお、いろいろな場合に本当にちゃんと動くのか、また動作の効率がどうか等は一切検証していません。
この回答への補足
今SQLiteを使用しているため理由はわからないですが、select top 1 ~ が使用できません。
そこで、再度質問ですが、
テーブル(sample1)のtextにwordが一致する最も出現頻度の高いnumを抽出するSQLをよろしくお願い致します。
max()を使うのでしょうか??わかりません。。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript JAVASCRIPT 2 2022/04/15 15:10
- JavaScript html javascriptにてWeb SQLを操作したい。 2 2022/12/16 17:43
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- Excel(エクセル) VBA フォルダ見える化のコードについて 2 2023/06/19 15:04
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- PHP カラーミーショップのSmartyでの文字列抜き出し 2 2022/05/06 11:51
- PHP クエリObjectをforeachで回す時に、次のレコードへ移動せずに次のレコードを取得したい 2 2022/07/28 15:29
- UNIX・Linux 次の要件を満たすにはどのように修正したらよろしいでしょうか 1 2022/11/24 20:57
- C言語・C++・C# C pointer? or... 2 2022/03/29 00:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQLサーバー接続 特定のPCがWin...
-
SQLサーバで和暦から西暦に変換...
-
<SQL>重複しているデータの場合...
-
ACCESS2007 フォーム 「バリア...
-
chr(13) と char(13) の違いっ...
-
これをSQL文で出来るでしょうか?
-
sqlserverで集計結果をUPDATEし...
-
sqlで、600行あるテーブルを100...
-
SQL Date型の列から年月だけを...
-
SQL文 複数実行
-
Accessの重複なしのカウントの...
-
SQLのエラー(~付近に不適切な...
-
BULK INSERT時のNull許容について
-
SQLて何ですか!
-
[SQLServer] テーブル名からカ...
-
【SQLサーバ】float型における...
-
SQL Server 縦方向のデータを列...
-
サーバー破壊
-
Visuaal Studio Community 2022...
-
AccessのInsertクエリのあとつ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
1文で最大値を求める方法
-
エクセルの外部データ取り込み...
-
SQLローダーCSV取込で、囲み文...
-
単一グループのグループ関数で...
-
select文の実行結果に空白行を...
-
テーブルの最後(最新)のレコー...
-
count関数の値をwhere句で使用...
-
【PL/SQL】FROM区に変数を使う方法
-
SELECT FOR UPDATE で該当レコ...
-
2つの列が同じ値の行を取得するSQL
-
レコードの登録順がおかしい
-
<SQL>重複しているデータの場合...
-
AccessのSQL文で1件のみヒット...
-
アクセスのレポートでレコード...
-
where句中のtrim関数について
-
複数のテーブルから値を合計出...
-
エクセル、並び替え正しくソー...
-
Oracleで「文字が無効です」の...
-
group byの並び順を変えるだけ...
-
引数によってwhere句を切り替え...
おすすめ情報