我有以下表格:
交易:  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
我的问题是这样的:
我可以使用什么 SQL 语句来返回Student Name、Points Earned、Points Spent、Points Remaining?
不久前我问了一个类似的问题,它提供了以下陈述。但是,经过检查,它似乎并不完全准确 - 特别是所用积分无法正常工作。
SELECT  Recipient_ID AS StudentID,
        SumOfPointsOfPurchasesMade.Points AS PurchasesMade,
        SumOfPointsEarned.Points AS PointsEarned,
        SumOfPointsEarned.Points - COALESCE(SumOfPointsOfPurchasesMade.Points, 0) AS CurrentPoints
FROM   
(
    SELECT SUM(Points) AS Points, Recipient_ID 
    FROM   transactions
    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
        GROUP  BY purchases.Student_ID
    ) AS SumOfPointsOfPurchasesMade 
    ON SumOfPointsEarned.Recipient_ID = SumOfPointsOfPurchasesMade.Student_ID
WHERE SumOfPointsEarned.Points < SumOfPointsOfPurchasesMade.Points
ORDER BY `CurrentPoints`  DESC
提前致谢,