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

MySQL查询:找出率先达成指定销售额或销量总和的用户

首个达成销售目标用户的MySQL查询方案

核心思路

  1. 按用户分组、销售日期排序,计算每个用户的累计销售金额与累计销售数量
  2. 筛选出每个用户首次满足「累计金额≥X」或「累计数量≥Y」的记录
  3. 在所有首次达标的记录中,取销售日期最早的用户,即为目标结果

示例查询语句(以X=4000、Y=10为例)

WITH user_cumulative_sales AS (
    -- 计算每个用户的累计销售数据,按日期顺序排序
    SELECT
        s.user_id,
        u.username,
        s.date,
        SUM(s.amount) OVER (PARTITION BY s.user_id ORDER BY s.date) AS cumulative_amount,
        SUM(s.quantity) OVER (PARTITION BY s.user_id ORDER BY s.date) AS cumulative_quantity
    FROM sales s
    JOIN users u ON s.user_id = u.id
),
first_achievement_records AS (
    -- 筛选每个用户首次达成目标的记录
    SELECT
        *,
        ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY date) AS achievement_seq
    FROM user_cumulative_sales
    WHERE cumulative_amount >= 4000 OR cumulative_quantity >= 10
)
-- 取出所有首次达标记录中日期最早的用户
SELECT
    user_id,
    username,
    date AS achievement_date,
    cumulative_amount,
    cumulative_quantity
FROM first_achievement_records
WHERE achievement_seq = 1
ORDER BY date
LIMIT 1;

代码说明

  • user_cumulative_sales CTE:利用窗口函数SUM() OVER (PARTITION BY user_id ORDER BY date),实现按用户分组、日期递增的累计计算,得到每条销售记录对应的累计金额和数量。
  • first_achievement_records CTE:筛选满足目标条件的记录,再通过ROW_NUMBER()标记每个用户的首次达标记录(achievement_seq=1)。
  • 最终查询:从所有首次达标记录中按日期升序取第一条,返回该用户的ID、用户名、达标日期及截至当日的累计销售数据。

参数自定义

只需将WHERE cumulative_amount >= 4000 OR cumulative_quantity >= 10中的4000和10替换为实际需求的X(金额阈值)和Y(数量阈值)即可。

内容的提问来源于stack exchange,提问作者Jean Paul Rumeau

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 08:40:29