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

使用RANK() OVER函数能否计算得出「最受欢迎」的指标?

RANK() OVER 计算线路受欢迎度可行性说明

首先明确结论:RANK() 开窗函数完全可以满足你当前业务场景的计算需求,仅需要先明确「受欢迎度」的可量化规则即可。

业务实现逻辑

你可以按照如下步骤完成计算:

  • 第一步:过滤原始行程数据,排除所有时长超过2小时的无效记录
  • 第二步:按线路维度分组聚合,分别计算每个线路的平均行程时长、受欢迎度指标(通常可选用线路总行程订单量/乘车人次,也可根据业务规则调整为其他可排序的数值指标)
  • 第三步:过滤聚合结果,仅保留平均行程时长不低于8分钟的线路
  • 第四步:使用RANK() OVER对符合条件的线路按受欢迎度指标降序排序,排名为1的即为你要找的最受欢迎线路

参考SQL实现

WITH valid_trips AS (
    -- 过滤时长超过2小时的行程(假设行程时长单位为分钟)
    SELECT * FROM trips WHERE trip_duration <= 120
),
line_agg AS (
    -- 按线路聚合计算核心指标
    SELECT
        line_id,
        line_name,
        AVG(trip_duration) AS avg_trip_duration,
        COUNT(DISTINCT trip_id) AS popularity -- 此处以有效订单量作为受欢迎度衡量标准,可按需调整
    FROM valid_trips
    GROUP BY line_id, line_name
),
qualified_line AS (
    -- 筛选平均时长≥8分钟的线路
    SELECT * FROM line_agg WHERE avg_trip_duration >= 8
)
-- 计算受欢迎度排名
SELECT
    *,
    RANK() OVER(ORDER BY popularity DESC) AS popularity_rank
FROM qualified_line
-- 若只需返回最受欢迎的线路,可额外加条件:WHERE popularity_rank = 1

补充说明

如果你需要处理并列排名的场景,可以根据业务需求选择不同的排序开窗函数:

  • 用RANK():保留并列排名,并列第一的多个线路都会返回1,下一名排名会跳空(比如两个第一之后下一名是3)
  • 用DENSE_RANK():保留并列排名,排名不会跳空(两个第一之后下一名是2)
  • 用ROW_NUMBER():不保留并列,相同指标也会按照规则生成唯一连续排名

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:54:03