我正在使用 sqlite3。我有一个简单的任务要做,为此我必须编写一个可以在 sqlite3 中运行的 sql 查询。请参考下图了解我的示例数据、预期输出和查询必要性。
有人告诉我使用“分组依据”的提示,但我对 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
。外部查询总结了所有这些。
更新:正如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;
定期加入他们。这是一个概念上的飞跃,因为您必须将上面的原始查询视为一个集合,然后将这两个集合连接在一起:
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