我是SQL的新手。我有2个MySQL表。下面是它们的结构。Key_Hash
表
CREATE TABLE `key_hash` (
`primary_key` int(11) NOT NULL,
`hash` text NOT NULL,
`totalNumberOfWords` int(11) NOT NULL,
PRIMARY KEY (`primary_key`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
-
Key_Word
表CREATE TABLE `key_word` (
`primary_key` bigint(20) NOT NULL AUTO_INCREMENT,
`indexVal` int(11) NOT NULL,
`hashed_word` char(3) NOT NULL,
PRIMARY KEY (`primary_key`),
KEY `hashed_word` (`hashed_word`,`indexVal`)
) ENGINE=InnoDB AUTO_INCREMENT=28570982 DEFAULT CHARSET=latin1
现在,下面是我的查询
SELECT `indexVal`, COUNT(`indexVal`) FROM `key_word` WHERE `hashed_word` IN ('001','01v') GROUP BY `indexVal` LIMIT 100;
当您运行上面的查询时,您将得到如下输出
这里要注意的重要一点是,
indexVal
表中的key_word
与primary_key
表中key_hash
中的数据集相同(我认为它可以是外键吗?)。换句话说,primary_key
表中的key_hash
数据在indexVal
表中显示为key_word
。但是请注意indexVal
可以在表内出现任意次,因为它不是key_word
中的主键。好的,这不是我确切需要的查询。我需要计算每个唯一的
indexVal
在上述搜索中出现的次数,然后将其除以key_hash.totalNumberOfWords
中的适当值。我在下面提供一些示例。
想象一下,我运行了上面的查询,现在生成了结果。它说
indexVal
0在搜索中出现10次indexVal
1在搜索中出现20次indexVal
300在搜索中出现20,000次现在请记住
key_hash.primary_key
= key_word.indexVal
。首先,我搜索与key_hash.primary_key
类似的key_word.indexVal
并获取关联的key_hash.numberOfWords
。然后,将上述查询中出现的count()
与此key_hash.numberOfWords
相除,然后将总答案乘以100(以百分比形式获得值)。以下是我尝试过的查询,但有错误。 SELECT `indexVal`,COUNT(`indexVal`), (COUNT(`indexVal`) / (select `numberOfWords` from `key_hash` where `primary_key`=`key_word.indexVal`)*100) FROM `key_word` WHERE `hashed_word` IN ('001','01v') GROUP BY `indexVal` LIMIT 100;
我该怎么做?
编辑
这就是
key_hash
表的样子这就是
key_word
表的样子 最佳答案
您可以使用JOIN代替子查询
SELECT w.indexVal
, COUNT(w.indexVal)
, COUNT(w.indexVal) / MAX(h.numberOfWords) * 100
FROM key_word w
INNER JOIN key_hash h ON h.primary_key = w.indexVal
WHERE w.hashed_word IN ('001','01v')
GROUP BY indexVal
LIMIT 100
关于mysql - 从2个表中调用数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23327702/