我在MySQL中有一个名为hash
的表,它有2个字段, primary_key 和 hashValue 。我使用以下代码将数据输入到它们中:
insert into hash values (1,'car dog play ball morning dark night')
insert into hash values (2,'car dog play ball people morning dark night sydney love')
现在,我需要做以下事情。
例如:
想象一下,我输入以下单词集:sydney love people track
想象一下,我输入的百分比为:20
现在,primary_key = 2的行包含10个单词,其中3个(悉尼爱人)在输入的单词列表中。这3个字在第二行中意味着30%(10个中的3个字)。由于输入的百分比是20和30高于该值,我需要检索该行。就像这样,如果有任何其他行超过20,我也需要得到它们。
如何在MySQL中做这种事情?请注意我的数据库知识低于平均水平(我知道插入,删除,更新和Java中的JDBC)。
我以前使用Java做过这个。我逐行读取文件并做了同样的事情。这花费了太多时间。现在我要用DB替换文件但是我不能在这里应用相同的方法,因为原来的DB会非常大并且通过Java读取每一行都会很麻烦。仅供参考,将有数百万条记录。
答案 0 :(得分:0)
我会更改DB结构,引入多对多关系哈希< - > word
只需创建3个表hash
,words
,hash_words
。你的每一个都可以存储在3个表中。
使用hash_words
表格要容易得多。您的所有计算都只是在SQL级别上使用的聚合函数的结果。 (SUM/COUNT/AVG
)
答案 1 :(得分:0)
如果您可以更改数据结构,我会建议这样的事情:
INSERT INTO hash([key],[word])
VALUES
(1,'car'),
(1,'dog'),
(1,'play'),
(1,'morning'),
(1,'night'),
(2,'car'),
(2,'dog'),
(2,'play'),
(2,'ball'),
(2,'people'),
(2,'morning'),
(2,'dark'),
(2,'night'),
(2,'sydney'),
(2,'love')
然后你可以这样做一个查询:
select key,FullCount,SubCount,(100.0/FullCount)*SubCount as 'Percent' from (
select * from (select key,COUNT(*) FullCount from hash group by key) a
left join
(select key as subkey,COUNT(*) SubCount from hash where word in ('sydney','love','people','track') group by key) b
on a.key=b.subkey) c where (100.0/FullCount)*SubCount>20
(注意:未在MySQL上测试过!)
添加一些索引,您就完成了。