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