查询以查找表中的乘法计数

时间:2013-05-23 08:39:20

标签: sql sqlite

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

有人告诉我使用“group by”的提示,但我对SQL知之甚少。

enter image description here

2 个答案:

答案 0 :(得分: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);

内部查询与countterm的同一docID = 111的{​​{1}}相乘。外部查询对所有这些进行求和。

更新:正如 ypercube 所指出的,这可以在没有这样的派生表的情况下完成。

docID = 222

答案 1 :(得分: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