0

次のテーブルがあります。

取引: Transaction_ID Datetime Giver_ID Recipient_ID Points Category_ID Reason

報酬: Reward_ID Title Description Image_URL Date_Inactive Stock_Count Cost_to_User Cost_to_System

購入:Purchase_ID Datetime Reward_ID Quantity Student_ID Student_Name Date_DealtWith Date_Collected


スタッフ メンバーは、次のようにトランザクションテーブルへのエントリとなるポイントを学生に授与します。

Transaction_ID Datetime Giver_ID Recipient_ID Points Category_ID Reason
8 2011-09-07 36761 127963 2 1 Excellent behaviour in behaviour unit

学生は、次のように、購入テーブルへのエントリとなる報酬を購入できます。

Purchase_ID Datetime Reward_ID Quantity Student_ID Student_Name Date_DealtWith Date_Collected
1570 2012-05-30 12:46:36 2 1 137616 Bradley Richardson NULL NULL

すべての報酬は、報酬データベース テーブルに手動で保存されます。

Reward_ID Title Description Image_URL Date_Inactive Stock_Count Cost_to_User Cost_to_System
1 Lunch Time Queue Pass (month) Beat the queue and get to the hot food early! /user/74/167976.png 2012-04-16 11:50:00 0 100 0


私の質問は次のとおりです:
Reward_ID と Student_ID が与えられた場合、学生が報酬を購入するのに十分なポイントを持っている場合、どの SQL ステートメントを使用して解決できますか?

以前に PHP でこれを実行したことがありますが、可能であれば単一の SQL ステートメントを使用して実行できるようにしたいと考えています。疑似コードは次のようなものですSELECT ( SumOfPointsEarned - SumOfPointsOfPurchasesMade )が、どうすればいいのかまったくわかりません!

どんな提案でも大歓迎です。

4

2 に答える 2

1

1つのアプローチは、インラインビューを使用することです。これをする

  • 獲得したポイントを合計するクエリを作成します
  • 費やしたポイントを合計するクエリを作成します
  • クエリを結合します(まだ何も使用していない場合は左結合)
  • あなたの減算を行います


SELECT SumOfPointsEarned.Points - COALESCE(SumOfPointsOfPurchasesMade.Points, 0) AS CurrentPoints
FROM   
(
    SELECT SUM(Points) AS Points, Recipient_ID 
    FROM   transactions 
            WHERE Recipient_ID= 137642
    GROUP  BY Recipient_ID
) AS SumOfPointsEarned 
    LEFT JOIN 
    (
        SELECT purchases.Student_ID,  SUM(rewards.Cost_to_User) AS Points 
        FROM   purchases 
            INNER JOIN rewards 
            ON purchases.Reward_ID = rewards.Reward_ID 
                    WHERE Student_ID = 137642
        GROUP  BY purchases.Student_ID
    ) AS SumOfPointsOfPurchasesMade 
    ON SumOfPointsEarned.Recipient_ID = SumOfPointsOfPurchasesMade.Student_ID
于 2012-05-31T15:03:11.470 に答える
0

トランザクション:Transaction_ID日時Giver_IDRecipient_IDポイントCategory_ID理由

報酬:Reward_IDタイトル説明Image_URL Date_Inactive Stock_Count Cost_to_User Cost_to_System

購入:Purchase_ID日時報酬_ID数量Student_ID Student_Name Date_DealtWith Date_Collected


SELECT SUM(a.Points)Total_Points、b.Reward_ID、b.Student_ID、b.Student_Nameは、内部結合が購入するトランザクションからb ON a.Student_ID = b.Student_ID;

これは1つのテーブルである必要があり、points_tableに挿入してから、WHERE Total_Points>Cost_to_User...を使用して報酬テーブルに結合できます。

于 2012-05-31T15:03:06.853 に答える