mysql中,我有一个招聘表,有一列是薪资,薪资的格式是20-50k这种格式,还有一些是20-50k 16薪,我现在想统计,10k以下有多少个,10k-20k有多少个,但是有一些是8-13k,像这种的,最低是8k,比10k少2k,最高是13k,比10k多3k,归类与10-20k,以此内推
时间: 2024-03-09 09:45:57 浏览: 21
针对你的需求,可以使用MySQL的CASE语句和正则表达式来实现。以下是一种实现方式:
```
SELECT
SUM(CASE
WHEN salary REGEXP '^[0-9]+-[0-9]+k' AND CAST(SUBSTRING_INDEX(salary, '-', 1) AS UNSIGNED) < 10 THEN 1
WHEN salary REGEXP '^[0-9]+-[0-9]+k' AND CAST(SUBSTRING_INDEX(salary, '-', 1) AS UNSIGNED) >= 10 AND CAST(SUBSTRING_INDEX(salary, '-', -1) AS UNSIGNED) <= 20 THEN 1
WHEN salary REGEXP '^[0-9]+-[0-9]+k' AND CAST(SUBSTRING_INDEX(salary, '-', -1) AS UNSIGNED) > 20 THEN 1
ELSE 0
END) AS '10k以下或10k-20k或20k以上'
FROM
recruitment_table;
```
上述SQL语句使用了正则表达式来判断薪资的格式,然后使用CASE语句针对不同的薪资范围进行统计。其中:
- ^[0-9]+-[0-9]+k 表示匹配20-50k这种格式的薪资;
- CAST(SUBSTRING_INDEX(salary, '-', 1) AS UNSIGNED) 表示将薪资中的最低值提取出来并转化为UNSIGNED类型;
- CAST(SUBSTRING_INDEX(salary, '-', -1) AS UNSIGNED) 表示将薪资中的最高值提取出来并转化为UNSIGNED类型;
你可以根据自己的实际需求进行修改。