SQL 刷题/【携程】识别贡献前 80% 营收的核心营位
上一题下一题困难通过率 45%

【携程】识别贡献前 80% 营收的核心营位

JOIN 连接聚合函数窗口函数CASE WHEN日期函数营收统计排行榜面试真题

题目描述

来源:携程 SQL 面试真题

某网红连锁露营地在 2025 年旺季结束后进行经营复盘。总部希望按照帕累托法则,识别真正支撑营收的核心营位。

只考虑 check_in 在 2025-04-01 至 2025-09-30 之间的预订。

实际入账规则

weather实际入账比例
sunny / cloudy100%
light_rain70%
heavy_rain50%
storm0%

核心营位定义

  1. 先按营位汇总旺季实际入账。
  2. 按 actual_revenue 降序排列;实际入账相同时,按 site_id 升序排列。
  3. 从上到下累计实际入账。
  4. 当且仅当累加到本行之前的累计入账仍小于总入账的 80% 时,该营位属于核心营位。

因此,首次使累计占比达到或超过 80% 的营位也必须包含;当前一行累计占比已经达到 80% 时,后续营位不再属于核心营位。

数据表

t_camp_site 营位档案表

字段类型说明
site_idBIGINT营位编号
site_nameVARCHAR(64)营位名称
site_typeVARCHAR(16)住宿类型:tent / cabin / rv / canopy
capacityTINYINT最大容纳人数
daily_priceDECIMAL(7,2)每晚定价
regionVARCHAR(32)所在片区

t_booking 预订记录表

字段类型说明
booking_idBIGINT预订编号
site_idBIGINT营位编号,关联 t_camp_site.site_id
guest_phoneVARCHAR(16)住客手机号
check_inDATE入住日期
check_outDATE离营日期,严格大于 check_in
party_sizeTINYINT实际入住人数
weatherVARCHAR(16)整体天气
paid_amountDECIMAL(8,2)客人预付总金额

输出字段

字段说明
site_id营位编号
site_name营位名称
site_type住宿类型
region所在片区
booking_cnt旺季内预订单数
total_nights旺季内总入住晚数,每单按 check_out - check_in 计算
actual_revenue按天气加权后的实际入账总额,四舍五入保留 2 位
cumulative_revenue按指定顺序计算的含本行累计入账,保留 2 位
cumulative_pct累计入账占总入账的百分比,四舍五入保留 2 位

排序规则

  1. actual_revenue 降序。
  2. site_id 升序。

数据样例

当前运行环境
site_idPKBIGINTsite_nameVARCHAR(64)site_typeVARCHAR(16)capacityTINYINTdaily_priceDECIMAL(7, 2)regionVARCHAR(32)
1湖畔一号tent4680湖畔区
2云杉木屋cabin61280森林区
3星空房车rv5980观星区
4溪谷天幕canopy8520溪谷区
5山脊木屋cabin41180山脊区
6竹林帐篷tent3480竹林区
7日落房车rv4880观景区
8松林天幕canopy6560森林区
输入数据显示 8 / 8
SQL 编辑器正在保存草稿...
正在加载 SQL 编辑器...

运行你的 SQL 查询后,结果将显示在这里