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替换为您的实际表名。




完美运行。

本文章由javascript技术分享原创和收集

发表评论 (审核通过后显示评论):