I have a following mysql query which consists some inner select operations. But it is to slow to get output from that query..
x
SELECT
c.topicName as 'topicName',
c1 as 'sumOfWordsInTopic',
c.word,
c.wordCount,
c2/c1 AS 'wordProbability'
FROM weightallofwordsintopic as c
JOIN (
SELECT topicName, sum(wordCount) AS 'c1'
FROM weightallofwordsintopic group by topicName
) AS sub1 ON c.topicName = sub1.topicName
JOIN (
SELECT topicName,word, wordCount AS 'c2'
FROM weightallofwordsintopic
) AS sub2 ON c.topicName = sub2.topicName and c.word=sub2.word
First inner select takes sum of wordCounts and second one takes wordcounts and the outer select take division of them. Is there any way to make it a bit more faster ? Thanks for your interest..
Advertisement
Answer
First, I’m not sure why you have a second subquery. I think this should do what you want:
SELECT wwt.topicName, t.topic_cnt as sumOfWordsInTopic,
wwt.word, wwt.wordCount,
(wwt.word / t.topic_cnt) AS wordProbability
FROM weightallofwordsintopic as wwt JOIN
(SELECT topicName, sum(wordCount) AS topic_cnt
FROM weightallofwordsintopic
GROUP BY topicName
) t
ON wwt.topicName = t.topicName;
This will speed up the query a bit.