有没有办法按文本字段对表进行分组,计算出这个文本字段并不总是完全相同?
示例:
select city_hotel, count(city_hotel)
from hotels, temp_grid
where st_intersects(hotels.geom, temp_grid.geom)
and potential=1
and part=4
group by city_hotel
order by (city_hotel) desc
我得到的输出是预期的,例如,城市名称和计数:
"Vassiliki ";1
"Vassiliki";1
"Vassilias, Skiathos";1
"Vassilias";5
"Vasilikí";25
"Vasiliki";23
"Vasilias";1
但是我想要将这个领域分组更多,并且只得到一个" Vasiliki" (或者包含所有的数组,这不是问题)以及包含它们之间类似内容的所有单元格的计数。
我不知道这是否可行。也许某些功能可以用于文本分析或类似的东西?
答案 0 :(得分:1)
SELECT COUNT(*), `etc` FROM table GROUP BY textfield LIKE '%sili%';
// The '%' is a SQL wildcard, which matches as many of any character as required.
你可以做上面这样的事情,为'喜欢'选择一个单词。最适合用户使用的拼写。
可以帮助解决的问题是
SELECT COUNT(*), textfield FROM table GROUP BY textfield ORDER BY textfield;
选择最平均的'拼写你的话。 否则你开始进行一些语言处理,为此你需要在SQL之外编写一些代码。
这就像https://en.wikipedia.org/wiki/Damerau%E2%80%93Levenshtein_distance
查找在任意误差范围内相同的单词。
这里有一个MySQL实现,您应该能够根据需要进行转置 https://stackoverflow.com/a/6392380/1287480
(credit https://stackoverflow.com/a/3515291/1287480)
(关于该主题的个人想法)
你真的想要考虑限制用户的输入,这些用户可以首先解决这个问题。为用户提供一个可供选择的地方列表,远比推动潜在的“肮脏”地方要好得多。信息到你的数据库。最终总是随着你试图在以后清理信息而结束。一个让很多人受雇多年的问题。