gpt4 book ai didi

mysql - 计算每行出现多少次不同的单词

转载 作者:行者123 更新时间:2023-12-01 00:03:44 24 4
gpt4 key购买 nike

我有一个像这样的 mysql 表:

id         content
----- ------
1 Big green tree
2 Small green tree
3 Green tree
4 Small yellow tree
5 Big green lake

我想计算每行出现多少次不同的单词。

示例:如果我搜索Biggreentree。它应该返回这样的结果:

id         count
----- ------
1 3
2 2
3 2
4 1
5 2

我试过类似的方法:

SELECT `content`
, COUNT(*) as count
FROM `elements`
WHERE `content` LIKE '%Big%'
OR `content` LIKE '%green%'
OR `content` LIKE '%tree%'
GROUP
BY `id`
ORDER BY count DESC;

它不起作用,因为它只为每个匹配项返回一行:

id         count
----- ------
1 1
2 1
3 1
4 1
5 1

最佳答案

您可以使用带有单词边界的 regexp。产生的匹配不区分大小写。如果需要区分大小写的匹配项,请使用 REGEXP BINARY

SELECT `content`, 
CASE WHEN `content` REGEXP '[[:<:]]big[[:>:]]' THEN 1 ELSE 0 END +
CASE WHEN `content` REGEXP '[[:<:]]green[[:>:]]' THEN 1 ELSE 0 END +
CASE WHEN `content` REGEXP '[[:<:]]tree[[:>:]]' THEN 1 ELSE 0 END
as num_matches
FROM `elements`
ORDER BY id

Sample Fiddle

编辑:根据 OP 的评论,获取 num_matches > 0 的行

SELECT * FROM (
SELECT `content`,
CASE WHEN `content` REGEXP '[[:<:]]big[[:>:]]' THEN 1 ELSE 0 END +
CASE WHEN `content` REGEXP '[[:<:]]green[[:>:]]' THEN 1 ELSE 0 END +
CASE WHEN `content` REGEXP '[[:<:]]tree[[:>:]]' THEN 1 ELSE 0 END
as num_matches
FROM `elements`) t
WHERE num_matches > 0

关于mysql - 计算每行出现多少次不同的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38881107/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com