-2

私はsqlite3を使用しています。簡単なタスクがあり、そのためには sqlite3 で実行できる sql クエリを作成する必要があります。私のサンプルデータ、予想される出力、およびクエリの必要性については、下の図を参照してください。

「group by」を使用するためのヒントを誰かが教えてくれましたが、私は SQL についてほとんど知りません。

ここに画像の説明を入力

4

2 に答える 2

3

これを試して..

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、同じtermfromdocID = 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);
于 2013-05-23T08:51:40.247 に答える
1

これは、作業中のすべての中間ステップを含むソリューションです。

まず、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

于 2013-05-23T09:20:46.857 に答える