MySQL查询:基于运输方式占比生成pvt列的需求
嘿,我来帮你搞定这个MySQL查询的需求!首先得捋清楚你说的“汽车配送占比相对其他运输方式超过90%”到底指啥——我给你两种最常见的场景方案,你按需调整就行。
场景1:某运输方式占总配送量的90%以上
假设你的数据表(比如叫delivery_orgs)里存了各个运输方式的实际配送量,比如cars(汽车配送数)、vans(货车配送数)、trucks(卡车配送数)这类字段,那查询语句可以这么写:
SELECT id, CASE -- 汽车配送占总配送的比例超过90%,标记为Cars WHEN cars / (cars + vans + trucks) > 0.9 THEN 'Cars' -- 货车配送占比超90%,标记为Vans WHEN vans / (cars + vans + trucks) > 0.9 THEN 'Vans' -- 可以继续加其他运输方式的判断,比如卡车 WHEN trucks / (cars + vans + trucks) > 0.9 THEN 'Trucks' -- 没有符合条件的,返回NULL或者你想要的默认值(比如'None') ELSE NULL END AS pvt FROM delivery_orgs -- 过滤掉总配送量为0的记录,避免除以0的错误 WHERE (cars + vans + trucks) > 0;
要是你的表已经直接存了各运输方式的占比(比如cars_pct是百分比数值,比如95就代表95%),那语句能简化不少:
SELECT id, CASE WHEN cars_pct > 90 THEN 'Cars' WHEN vans_pct > 90 THEN 'Vans' WHEN trucks_pct > 90 THEN 'Trucks' ELSE NULL END AS pvt FROM delivery_orgs;
场景2:某运输方式的量是其他所有方式总和的90%以上
如果你的意思是“汽车配送量比其他所有运输方式加起来还多90%”,那判断逻辑就得改成单个运输方式和其他方式总和的对比,语句如下:
SELECT id, CASE WHEN cars > 0.9 * (vans + trucks) THEN 'Cars' WHEN vans > 0.9 * (cars + trucks) THEN 'Vans' WHEN trucks > 0.9 * (cars + vans) THEN 'Trucks' ELSE NULL END AS pvt FROM delivery_orgs WHERE (cars + vans + trucks) > 0;
小提醒
- 记得把表名、字段名替换成你实际用的名称
- 要是还有其他运输方式,直接在CASE语句里加新的WHEN条件就行
- 总配送量为0的记录,我加了WHERE过滤,你要是想保留这类记录,可以把WHERE去掉,同时给ELSE设个默认值(比如'No Deliveries')
内容的提问来源于stack exchange,提问作者Barry D.
相关产品推荐
相关产品推荐

