私はsqlite3を使用しています。簡単なタスクがあり、そのためには sqlite3 で実行できる sql クエリを作成する必要があります。私のサンプルデータ、予想される出力、およびクエリの必要性については、下の図を参照してください。
「group by」を使用するためのヒントを誰かが教えてくれましたが、私は SQL についてほとんど知りません。
これを試して..
SELECT sum(t)
FROM
(SELECT f1.count*f2.count t
FROM fruits f1,
fruits f2
WHERE f1.term=f2.term
AND f1.docID=111
AND f2.docID=222);
内側のクエリはcount
、同じterm
fromdocID = 111
とを乗算しますdocID = 222
。外側のクエリは、それらすべてを合計します。
UPDATE : ypercubeで指摘されているように、これはこのような派生テーブルなしで実行できます..
SELECT SUM(f1.count*f2.count) total
FROM fruits f1,
fruits f2
WHERE f1.term=f2.term
AND f1.docID=111
AND f2.docID=222);
これは、作業中のすべての中間ステップを含むソリューションです。
まず、docID が 111 の果物をすべて見つけます。
SELECT term, count FROM fruits
WHERE docID = 111;
次に、docID 222 を持つすべての果物を見つけます。
SELECT term, count FROM fruits
WHERE docID = 222;
期間中に一緒に参加してください。これは概念上の飛躍であり、上記の元のクエリを 1 つのセットとして見てから、2 つのセットを結合する必要があります。
SELECT *
FROM (SELECT term, count FROM fruits
WHERE docID = 111) as f1
INNER JOIN
(SELECT term, count FROM fruits
WHERE docID = 222) as f2
ON f1.term = f2.term;
2 つの「カウント」列を乗算します。
SELECT f1.count * f2.count as multicount
FROM (SELECT term, count FROM fruits
WHERE docID = 111) as f1
INNER JOIN
(SELECT term, count FROM fruits
WHERE docID = 222) as f2
ON f1.term = f2.term;
ついに:
それらの列をすべて合計します。もう 1 つの概念上の飛躍として、前に持っていたクエリ全体をラッパーでラップし、そのセットの結果に対して処理を行います。これにより、最終的な解決策が得られます。
SELECT sum(multicount) total
FROM (
SELECT f1.count * f2.count as multicount
FROM (SELECT term, count FROM fruits
WHERE docID = 111) as f1
INNER JOIN
(SELECT term, count FROM fruits
WHERE docID = 222) as f2
ON f1.term = f2.term;
) as all_fruits;
コードを試してください: SQLFiddle