我正在使用sqlite3。我有一个简单的任务要做,为此我必须编写一个可以在sqlite3中运行的sql查询。请参考下图,了解我的样本数据,预期输出和查询必要性。
有人告诉我使用“group by”的提示,但我对SQL知之甚少。
答案 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);
内部查询与count
和term
的同一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