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

SQL Server:如何添加5星评分占比25%的司机筛选条件

解决司机5星评分占比筛选的SQL问题

没问题,我来帮你搞定这个占比筛选的需求!你之前的查询只统计了5星订单的数量,但要计算占比,我们得同时拿到每个司机的总订单数和5星订单数,这样才能算出5星占总订单的比例。

为什么你之前用avg(DriverId)不对?

avg(DriverId)是计算司机ID的平均值,和订单占比完全不相关。占比的计算逻辑是「5星订单数 ÷ 总订单数」,所以必须先获取这两个关键数值再做除法。

解决方案:用子查询或CTE关联数据

这里提供两种清晰的写法,都能满足你的筛选条件(过去30天、5星数≥10、5星占比≥25%):

方法1:使用子查询

SELECT 
    t.DriverId,
    f.FiveStarTrips,
    t.TotalTrips,
    CAST(f.FiveStarTrips AS FLOAT) / t.TotalTrips AS FiveStarPercentage
FROM 
    -- 先统计每个司机过去30天的总订单数
    (SELECT DriverId, COUNT(*) AS TotalTrips
     FROM tblTripfeedback
     WHERE TripDate >= GETDATE() - 30
     GROUP BY DriverId) t
JOIN 
    -- 统计5星订单数≥10的司机
    (SELECT DriverId, COUNT(*) AS FiveStarTrips
     FROM tblTripfeedback
     WHERE Rating = 5 AND TripDate >= GETDATE() - 30
     GROUP BY DriverId
     HAVING COUNT(*) >= 10) f ON t.DriverId = f.DriverId
WHERE 
    -- 筛选5星占比≥25%的司机
    CAST(f.FiveStarTrips AS FLOAT) / t.TotalTrips >= 0.25

方法2:使用CTE(公共表表达式,代码更易读)

WITH DriverTotalTrips AS (
    -- 统计每个司机过去30天的总订单数
    SELECT DriverId, COUNT(*) AS TotalTrips
    FROM tblTripfeedback
    WHERE TripDate >= GETDATE() - 30
    GROUP BY DriverId
),
DriverFiveStarTrips AS (
    -- 统计5星订单数≥10的司机
    SELECT DriverId, COUNT(*) AS FiveStarTrips
    FROM tblTripfeedback
    WHERE Rating = 5 AND TripDate >= GETDATE() - 30
    GROUP BY DriverId
    HAVING COUNT(*) >= 10
)
SELECT 
    d.DriverId,
    d.FiveStarTrips,
    t.TotalTrips,
    CAST(d.FiveStarTrips AS FLOAT) / t.TotalTrips AS FiveStarPercentage
FROM DriverFiveStarTrips d
JOIN DriverTotalTrips t ON d.DriverId = t.DriverId
WHERE CAST(d.FiveStarTrips AS FLOAT) / t.TotalTrips >= 0.25

关键细节说明

  • 数据类型转换:用CAST(xxx AS FLOAT)是为了避免整数除法(比如15÷20如果用整数计算会得到0,而不是0.75),确保得到正确的百分比数值。
  • 你的示例验证:司机ID123总订单20,5星15,15÷20=0.75≥0.25,且5星数15≥10,会被成功筛选出来,符合你的奖励条件。

内容的提问来源于stack exchange,提问作者user3198688

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 08:22:34