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

SQL查询需求:计算Store表中用户购买与销售次数的比值

解决方案

针对指定RegionID下用户购买次数与销售次数的比值统计,以下是可行的SQL实现:

WITH AllUsers AS (
    -- 提取该区域所有出现过的唯一用户
    SELECT Buyer AS UserID FROM Store WHERE RegionID = 1
    UNION
    SELECT Seller AS UserID FROM Store WHERE RegionID = 1
),
PurchaseStats AS (
    -- 统计每个用户的购买次数
    SELECT Buyer AS UserID, COUNT(*) AS BuyTimes
    FROM Store
    WHERE RegionID = 1
    GROUP BY Buyer
),
SaleStats AS (
    -- 统计每个用户的销售次数
    SELECT Seller AS UserID, COUNT(*) AS SellTimes
    FROM Store
    WHERE RegionID = 1
    GROUP BY Seller
)
SELECT
    au.UserID,
    COALESCE(ps.BuyTimes, 0) AS BuyTimes,
    COALESCE(ss.SellTimes, 0) AS SellTimes,
    -- 处理销售次数为0的情况,避免除以0报错
    CASE
        WHEN COALESCE(ss.SellTimes, 0) = 0 THEN NULL
        ELSE CAST(ps.BuyTimes AS DECIMAL) / ss.SellTimes
    END AS BuySellRatio
FROM AllUsers au
LEFT JOIN PurchaseStats ps ON au.UserID = ps.UserID
LEFT JOIN SaleStats ss ON au.UserID = ss.UserID
ORDER BY au.UserID;

关键说明

  • AllUsers:通过UNION去重,确保覆盖所有在该区域有购买或销售行为的用户,不会遗漏只买不卖或只卖不买的用户。
  • PurchaseStats/SaleStats:分别统计购买和销售次数,通过WHERE RegionID = 1限定目标区域,提升查询效率。
  • 主查询:
    • 使用LEFT JOIN保证每个用户都能出现在结果中,哪怕没有对应购买/销售记录。
    • COALESCE将NULL的次数转换为0,让结果展示更直观。
    • CASE语句处理销售次数为0的场景,避免触发除以0的错误,此时比值设为NULL。

扩展提示

如果需要统计全区域的用户比值,只需去掉所有WHERE RegionID = 1条件,并在CTE和主查询中加入RegionID进行分组关联即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 06:06:30