You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:10:30