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

关系除法实现:计算用户完整卡牌套组拥有数量

卡牌套组统计的SQL实现方案

要解决筛选集齐SetA套组的用户并统计每人套组总数的问题,核心是结合单卡持有数量和套组卡牌需求计算,原SQL仅能判断用户是否集齐卡牌,但无法统计可凑出的套数,以下是调整后的方案:

核心思路

SetA套组默认每张卡牌需要1张(若套组有特殊数量要求可修改),用户能凑出的套组总数,等于该用户套组内所有卡牌持有量的最小值——比如用户AA有2张、BB有2张、CC有3张,最多能凑2套。

完整SQL代码

SELECT 
    tc.User,
    FLOOR(MIN(tc.Quantity / cs.RequiredQty)) AS SetA套组总数
FROM 
    Cards tc
JOIN (
    -- 提取SetA的卡牌构成及单卡需求数(默认1张,按需修改)
    SELECT 
        Card,
        1 AS RequiredQty
    FROM 
        CardSets
    WHERE 
        [Set] = 'SetA'
) cs ON tc.Card = cs.Card
GROUP BY 
    tc.User
HAVING 
    FLOOR(MIN(tc.Quantity / cs.RequiredQty)) >= 1;

代码说明

  1. 子查询先锁定SetA包含的所有卡牌,定义每张卡牌在套组中的需求数量(比如套组需要2张AA,就把1改成2)。
  2. 关联Cards表后,用FLOOR取整计算用户每张卡牌的持有量能支持多少套。
  3. 对每个用户取所有卡牌可支持套数的最小值,就是该用户最多能凑出的SetA套组总数。
  4. HAVING子句筛选出至少能凑1套的用户,符合需求。

适配特殊场景

如果CardSets表本身就记录了套组中每张卡牌的需求数量(比如有RequiredQuantity字段),直接替换子查询里的1为该字段即可:

SELECT 
    tc.User,
    FLOOR(MIN(tc.Quantity / cs.RequiredQuantity)) AS SetA套组总数
FROM 
    Cards tc
JOIN CardSets cs 
    ON tc.Card = cs.Card AND cs.[Set] = 'SetA'
GROUP BY 
    tc.User
HAVING 
    FLOOR(MIN(tc.Quantity / cs.RequiredQuantity)) >= 1;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 01:50:28