2

DBでボーナスを受け取ったユーザーを見つける必要があります。私が興味を持っているのは、ボーナスを2回以上獲得したユーザーだけです。

このクエリを実行して、ボーナスを2回以上取得したユーザーのみを取得するにはどうすればよいですか?

select Bonus, BonusUser, BonusType, Amount 
from Bonus 
where BonusType="1" 
order by BonusUser asc;

すべての「重複した」行をプロンプトするクエリが必要なので、それらからボーナスを削除できます。

これまで説明したことはありませんが、一部のユーザーはバグを悪用して無料のボーナスを獲得できる可能性があるため、重複した行を選択し、悪用された場合は分析して削除する必要があります。

4

3 に答える 3

3

あなたは以下のようにすることができます

   select BonusUser,
          count(*)
   from Bonus 
  where BonusType="1" 
  group by BonusUser
   having count(*)>1
  order by BonusUser asc

期待される結果を伴うダミーデータを提供する必要があります。

于 2012-04-19T16:41:19.613 に答える
2

GROUP BYHAVING句を追加します

SELECT Bonus
    , BonusUser
    , BonusType
    , Ammount 
FROM Bonus 
WHERE BonusType="1" 
GROUP BY BonusUser
HAVING Count(*) > 1
ORDER BY BonusUser asc;

あなたのコメントに基づいて、これはあなたが望むものだと思います、これはあなたにボーナス付きのすべてのユーザーのリストを与えますが、それはあなたに複数のボーナスを持っていたユーザーの数を与えます:

SELECT Bonus
    , t.BonusUser
    , BonusType
    , amount 
    , t2.cntbonus
FROM Bonus t
inner join 
(
    select count(*) as CntBonus, bonususer
    from Bonus
    where BonusType='1'
    group by bonususer
) t2
    on t.bonususer = t2.bonususer
WHERE BonusType='1'
ORDER BY BonusUser asc
于 2012-04-19T16:40:27.850 に答える
2

他の回答の代わりに、次のこともできます。

SELECT DISTINCT b1.*
FROM Bonus b1
JOIN Bonus b2
  ON b1.BonusUser = b2.BonusUser
  AND b1.Id > b2.Id
WHERE b1.BonusType = "1"
  AND b2.BonusType = "1"
ORDER BY b1.BonusUser ASC;
于 2012-04-19T16:44:56.617 に答える