根据MySQL中的条件检索数据

时间:2014-03-12 09:14:07

标签: java mysql sql database select

我在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')

现在,我需要做以下事情。

  1. 输入单词列表。
  2. 输入百分比值。
  3. 比较每行输入的单词,并获得行中可用单词的百分比。
  4. 获取高于百分比值的数据行。
  5. 例如:

    想象一下,我输入以下单词集:sydney love people track

    想象一下,我输入的百分比为:20

    现在,primary_key = 2的行包含10个单词,其中3个(悉尼爱人)在输入的单词列表中。这3个字在第二行中意味着30%(10个中的3个字)。由于输入的百分比是20和30高于该值,我需要检索该行。就像这样,如果有任何其他行超过20,我也需要得到它们。

    如何在MySQL中做这种事情?请注意我的数据库知识低于平均水平(我知道插入,删除,更新和Java中的JDBC)。

    我以前使用Java做过这个。我逐行读取文件并做了同样的事情。这花费了太多时间。现在我要用DB替换文件但是我不能在这里应用相同的方法,因为原来的DB会非常大并且通过Java读取每一行都会很麻烦。仅供参考,将有数百万条记录。

2 个答案:

答案 0 :(得分:0)

我会更改DB结构,引入多对多关系哈希< - > word

只需创建3个表hashwordshash_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上测试过!)

添加一些索引,您就完成了。