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

如何用单条SQL查询优先返回用户的最优折扣记录?

解决方案:优先获取用户最优折扣记录

可以通过窗口函数ROW_NUMBER()实现单条查询返回每个用户的最优折扣记录,具体SQL如下:

SELECT id, user_id, country, discount, cashback, free_trial
FROM (
    SELECT 
        *,
        -- 按用户分组,给折扣类型分配优先级序号
        ROW_NUMBER() OVER (
            PARTITION BY user_id 
            ORDER BY CASE discount 
                WHEN 'CHRISTMAS' THEN 1  -- 最优折扣排第1
                WHEN 'DEFAULT' THEN 2   -- 标准折扣排第2
                ELSE 3                  -- 其他折扣优先级最低
            END
        ) AS rn
    FROM users
    WHERE country = 'EUA'
    AND discount IN ('CHRISTMAS', 'DEFAULT')
) ranked_records
WHERE rn = 1; -- 只取每个用户优先级最高的那条记录

逻辑说明

  1. 内层子查询:
    • 用PARTITION BY user_id将数据按用户分组,确保每个用户的记录单独处理。
    • 通过CASE语句定义折扣优先级:CHRISTMAS > DEFAULT,再用ROW_NUMBER()给每组内的记录按优先级分配序号,优先级最高的记录序号为1。
  2. 外层查询:
    • 筛选出序号为1的记录,也就是每个用户的最优折扣记录;如果用户只有DEFAULT折扣,这条记录的序号就是1,会被保留。

验证结果

针对你的示例数据,执行该查询后会得到:

iduser_idcountrydiscountcashbackfree_trial
21EUACHRISTMAS20true
33EUADEFAULT10false

完全符合你的期望。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 02:20:37