最近在查询数据库的一些数据,想要统计表格里有多少公司,发现表格里没有公司这一列,只能从但是有一些标题字段,只能从中筛选。
假设关键词是[公司],我们要在数据库的表格中,找到名为title的列,列里面所有含有【公司】的名称,且因为公司名称不定,则直接公司前6位的字符,直接整理出一个名单出来
要清洗的数据格式类似这样:
想要实现的效果:
要实现这个需求,我们需要编写一个SQL查询,该查询要包含下面的条件:
需要从文本中筛选包含“公司”关键词的字段
需要找到“公司”关键词在字段中的位置,然后截取“公司”关键词位置前的X个字符(X 代表多少个,这个需要自己按照现实情况决定)
需要对重复数据做去重
以下是一个SQL查询的示例,假设你的表名为your_table
,列名为title
,我们将使用MySQL的函数作为示例:
sql">SELECT DISTINCT SUBSTRING(title, 1, CHAR_LENGTH(title) - CHAR_LENGTH(REPLACE(title, '公司', '')) + 6) AS company_name
FROM your_table
WHERE title LIKE '%公司%';
如果想要计算数值,在distinct前面加一个count就可以了
这个查询会做以下事情:
REPLACE
:替换掉字段中的所有关键词,替换为空字符串。
CHAR_LENGTH(title) - CHAR_LENGTH(REPLACE(title, 'XX', ''))
:
计算整体的关键词的总长度。
CHAR_LENGTH(title) - CHAR_LENGTH(REPLACE(title, 'XX', '')) + 4
:
计算“公司”关键词前4个字符的位置。
SUBSTRING(title, 1, CHAR_LENGTH(title) - CHAR_LENGTH(REPLACE(title, '公司', '')) + 4)
:
根据上一步计算的位置,截取“公司”关键词前的4个字符。
DISTINCT
:去除结果中的重复项。
WHERE title LIKE '%公司%'
:筛选出title
列中包含“公司”关键词的字段。
如果没有用CHAR_LENGTH 来计算长度的话,使用LEFT 也可以查询,但是会获取到标题的前N个字符:
SELECT COUNT(DISTINCT LEFT(your_column, 4)) AS unique_count
FROM your_table
WHERE your_column LIKE '%医院%';