Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
计算MySql中不同列中包含每个字符串的行数_Mysql_Sql - Fatal编程技术网

计算MySql中不同列中包含每个字符串的行数

计算MySql中不同列中包含每个字符串的行数,mysql,sql,Mysql,Sql,我有以下问题: 我有一张名为“食品”的表格,表格中的“名称”列包含食品名称,如“大米”、“白米”、“牛奶”、“豆奶”等 我需要过滤掉名称中只包含一个单词的行,然后计算这些单词中的每一个作为食品名称的一部分出现在名称列中的行数 例如,如果名称列为:“大米”、“白米”、“牛奶”、“豆浆”、“糙米”,则结果应为大米计数为3,牛奶计数为2 我知道如何获取名称列中包含单个单词的值: SELECT NAME AS lones FROM FOOD WHERE NAME NOT LIKE '% %' GROUP

我有以下问题: 我有一张名为“食品”的表格,表格中的“名称”列包含食品名称,如“大米”、“白米”、“牛奶”、“豆奶”等

我需要过滤掉名称中只包含一个单词的行,然后计算这些单词中的每一个作为食品名称的一部分出现在名称列中的行数

例如,如果名称列为:“大米”、“白米”、“牛奶”、“豆浆”、“糙米”,则结果应为大米计数为3,牛奶计数为2

我知道如何获取名称列中包含单个单词的值:

SELECT NAME AS lones FROM FOOD WHERE NAME NOT LIKE '% %' GROUP BY lones
我如何从这里继续


谢谢

尝试此查询。我将
food
加入由单个单词foods组成的临时表(我通过选择名称而创建,名称中没有空格)

联接条件是单个单词food出现在联接的food表的name列中

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;

您想“过滤掉名称仅包含一个单词的行”,但“Rice”的计数如何为3?“过滤掉只有一个单词的行”只是第一步。之后,对于每一个单词,我需要计算它作为食物名称的一部分出现在名称列中的次数。所以“大米”的计数应该是3,因为它出现在“大米”、“糙米”和“白米”中,所以你只是想知道这个名字出现了多少次?是的,每个名字都是一个单词,在“出现”中,我的意思是作为名字的一部分。所以“大米”出现在“大米”、“白米”等中。选择性聚合可能就是您要寻找的:这个解决方案似乎返回不可能的计数值。在食物表中,我有大约180k行,但对于解决方案表中的一些值(其中,第一列是一个单词,是食物名称,第二列是count),计数大于180k。可能是因为最后的分组(按单个单词分组的食物名称)?该组是否将该组的结果相加?(我应该指出,一些单字食品可以在食品表的名称栏中出现两次。例如,名称栏可以是:“大米”、“牛奶”、“大米”、“白牛奶”、“糙米”)@AtsrA我使用了不同的单字名称。你现在能检查一下吗?结果现在看来有道理了。谢谢!