-2

我正在使用 sqlite3。我有一个简单的任务要做,为此我必须编写一个可以在 sqlite3 中运行的 sql 查询。请参考下图了解我的示例数据、预期输出和查询必要性。

有人告诉我使用“分组依据”的提示,但我对 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相同term的 fromdocID = 111和相乘docID = 222。外部查询总结了所有这些。

更新:正如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;

定期加入他们。这是一个概念上的飞跃,因为您必须将上面的原始查询视为一个集合,然后将这两个集合连接在一起:

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;

将两个“计数”列相乘:

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;

最后:

将所有这些列加在一起。另一个概念上的飞跃,您将之前的整个查询包装在一个包装器中,然后对该集合的结果执行操作,从而为您提供最终解决方案:

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 回答