mysql截取字符串需求
今天收到一个mysql的小需求,让我帮忙研究研究。完整需求如下:
目标:找出某省公司车辆配置超标的地市公司
手段:利用SQL语句进行数据分析直接输出结果
数据表:湖南省公司各地市车辆出行台账,简化如下:
序号 车辆牌号 使用单位 车辆出行记录
1 湘A 11111 湖南省>长沙市公司>长沙县 ***
2 湘A 11111 湖南省>长沙市公司>长沙县 ***
3 湘A 22222 湖南省>长沙市公司>长沙县 ***
4 湘A 33333 湖南省>长沙市公司>宁乡 ***
5 湘A 44444 湖南省>长沙市公司>宁乡 ***
6 湘A 55555 湖南省>长沙市公司>星沙 ***
7 湘A 55555 湖南省>长沙市公司>星沙 ***
8 湘A 66666 湖南省>长沙市公司>星沙 ***
9 湘B 11111 湖南省>株洲市公司>醴陵 ***
10 湘B 11111 湖南省>株洲市公司>醴陵 ***
11 湘B 22222 湖南省>株洲市公司>炎陵 ***
12 湘B 33333 湖南省>株洲市公司>炎陵 ***
13 湘B 44444 湖南省>株洲市公司>炎陵 ***
14 湘C 11111 湖南省>湘潭市公司>韶山 ***
15 湘C 11111 湖南省>湘潭市公司>韶山 ***
16 湘C 22222 湖南省>湘潭市公司>湘乡 ***
公司要求各地市公司的车辆配置不能超过3台
想要得到的结果输出表如下:
序号 超标单位 车龄配置数量 车辆超标情况
1 长沙市公司 6 3 注:输出的超标单位是“车辆出行台账”中“使用单位”的部分字段,不是完整字段
2 株洲市公司 4 1
请写出SQL语句:
第一眼看到这个需求就感觉其中最麻烦的就是公司的截取,否则也不会特别标记出单位只取第二级这个问题。
或许是哪个公司遇到的一个实际问题无法解决所以求助了吧。
当然我很大概率也是写不出来的,但是我有ai助手哇。
把表结构跟数据内容描述清楚,然后把想要实现的效果描述清楚,居然就这么得到结构了。
问题描述:
有一张mysql数据表,表结构有id,车牌号carNum,公司company字段,其中compay的内容形式是湖南省>长沙市公司>长沙县,现在需要实现以下功能的sql语句:公司要求各地市公司的车辆配置不能超过3台,输出超标单位,车的配置数量,以及车辆超标数量,公司只取第二级的内容,例如长沙市公司。
通义灵码返回结果:
SELECT
SUBSTRING_INDEX(SUBSTRING_INDEX(`company`, '>', 2), '>', -1) AS city_company, -- 抽取公司名称的第二级
COUNT(`carNum`) AS car_config_count, -- 每个地市公司的车辆配置数量
COUNT(`carNum`) - 3 AS exceed_count -- 超过限制的车辆数量
FROM
your_table_name -- 请将此替换为实际的表名
GROUP BY
city_company
HAVING
COUNT(`carNum`) > 3 -- 筛选车辆配置超过3台的地市公司
ORDER BY
exceed_count DESC; -- 按超标数量降序排列
这段SQL做了以下几件事:
使用SUBSTRING_INDEX函数两次来提取公司名称的第二级,作为city_company。
使用GROUP BY按地市公司分组。
计算每个地市公司的车辆配置数量(car_config_count)。
计算并输出每个超标地市公司的超标车辆数量(exceed_count),即实际车辆数减去允许的最大配置数(3台)。
通过HAVING子句筛选出车辆配置超过3台的记录。
最后,按超标车辆数量降序排序结果。
请确保将your_table_name替换为您的实际表名。
完美运行。
发表评论 (审核通过后显示评论):