2

我有两张表,一张'gift_limit_count'和一张'score',如下所示:

'gift_limit_count' 包含:

gift_id
gift_limit
gift_amount

“分数”包含:

user_id 用户名
user_score

当用户的“user_score”计数达到下一个最高的“gift_limit”时,他们将获得“gift_amount”。我想做的是显示一个列表,比如最接近下一个奖项的前 10 名用户。

例如:

David(user_name) 在获得 40 英镑之前还有 1 分 (gift_amount)
Suzi 在获得 20 英镑之前
还有 2 分 Ian 在获得 40 英镑之前还有 2 分
Zack 在获得 40 英镑之前还有 3 分30 英镑
……

4

2 回答 2

2
Select S.user_id, S.user_name, S.user_score
    , GLC.gift_limit, GLC.gift_amount
From    (
        Select S1.user_id
            , Min( GLC1.gift_limit ) As NextLimit
        From score As S1
            Join gift_limit_count As GLC1
                On GLC1.gift_limit > S1.user_score
        Group By S1.user_id
        ) As Z
    Join score As S
        On S.user_id = Z.user_id
    Join gift_limit_count As GLC
        On GLC.gift_limit = Z.NextLimit
Order By ( gift_limit - user_score )
Limit 10
于 2012-04-26T17:28:53.273 回答
1

您可能可以使用基于 min( score - gift_limit ) 的连接进行查询(分数 < gift_limit ),然后按每个人的最低值排序。将其分组以获得每人一个答案。

于 2012-04-26T17:20:55.870 回答