2017-10-29 178 views
-1

我有以下問題: 我有一個名爲FOOD的表,其中包含食物名稱的列「NAME」,如「Rice」,「White Rice」 ,「牛奶」,「豆漿」等。計數在MySql的不同列中包含每個字符串的行數

我需要過濾出只包含一個單詞的NAME的行,然後計算這些單個單詞中的每一行在NAME列中的出現次數爲食物名稱的一部分。

例如,如果NAME列是:「Rice」,「White Rice」,「Milk」,「Soy Milk」,「Brown Rice」,那麼結果應該是Rice - count是3,Milk - count是2.

我知道如何在NAME列其中包含一個單詞的值:

SELECT NAME AS lones FROM FOOD WHERE NAME NOT LIKE '% %' GROUP BY lones 

如何從這裏繼續下去嗎?

謝謝

+0

你想「過濾只包含一個單詞的NAME的行」,但是「Rice」的計數如何爲3?它不會變成2嗎? – Vasan

+0

「過濾只包含單個詞的NAME的行」只是第一步。之後,對於這些單詞中的每一個,我需要計算它出現在NAME列中作爲食物名稱的一部分的次數。所以「水稻」的數量應該是3,因爲它出現在「水稻」,「糙米」和「白米」 – AtsrA

+0

所以你只是想找出這個名字出現多少次? –

回答

1

試試這個查詢。我加入food對由單詞食物組成的臨時表(我通過選擇沒有空格的名字創建)。

加入條件是單字食品存在於加入食品表的名稱列中。

POSITION()像其他語言中的indexOf()函數一樣工作。如果在源字符串中找不到搜索字符串,它將返回0。

select single_word_foods.name, count(*) 
from food INNER JOIN 
(select distinct name from food where position(' ' in name) = 0) as single_word_foods 
on POSITION(single_word_foods.name in food.name) > 0 
group by single_word_foods.name; 
+0

這種解決方案似乎返回計數值,可能。在FOOD表中,我有大約180k行,但對於解決方案表中的一些值(其中第一列是一個單詞是食物名稱,第二列是count),計數大於180k。這可能是因爲最後的團隊(由single_word_foods.name分組)嗎?這個小組是通過總結小組的結果嗎? (我應該說明一些單詞食物可以在FOOD表的NAME列中出現兩次,例如NAME列可以是:「Rice」,「Milk」,「Rice」,「White Milk」,「Brown Rice」 ) – AtsrA

+0

@AtsrA我使用不同的單個單詞名稱。你現在可以檢查嗎? – Vasan

+0

現在的結果似乎有意義。非常感謝! – AtsrA

相關問題