我正在尝试加入三个表。
第一个表transactions
包含学生获得的“积分”的详细信息。这里的相关字段是Recipient_ID
(学生获得分数)。
第二个表purchases
包含学生购买的“奖励”的详细信息。这里的相关字段是Student_ID
和Reward_ID
。
最终表格rewards
详细说明了购买的奖励。这里的相关字段是Reward_ID
,Cost_to_User
(学生为每个奖励支付的价格;我目前根本没有使用它)和Title
。
我正在尝试做的,提供特定的学生 ID 列表,显示学生积分列表和三个最昂贵的奖励购买。
到目前为止,我编写的 SQL 语句是:
SELECT
t.Recipient_ID AS `ID` ,
SUM( t.Points ) AS `Points Earned`,
SUBSTRING_INDEX( GROUP_CONCAT(DISTINCT r.Title SEPARATOR ', '),', ',3 ) as `Rewards`
FROM `transactions` t
JOIN `purchases` p ON t.Recipient_ID = p.Student_ID
JOIN `rewards` r ON p.Reward_ID = r.Reward_ID
WHERE T.`Recipient_ID`
IN ( 90128, 90163, 34403, 35501 )
GROUP BY t.`Recipient_ID`
这在一定程度上有效 - 显示两名学生,以及他们的总分和最新奖励。
但是,他们的总分大错特错,我相信如果学生没有购买任何东西,他们就不会显示。
如果学生没有购买,我仍然想展示他们。
我怀疑是我的 JOIN 不正确,但我也怀疑GROUP_CONCAT
不够强大,无法列出三个最昂贵的奖励。我需要更改我的 JOIN,还是需要使用某种子查询?
提前致谢,