【发布时间】:2023-03-25 08:18:01
【问题描述】:
我有 3 张桌子:
PLAYER (NAME)
ALL_GOALS (TYPE, GROUP , POINTS)
GOALS_REACHED (TYPE, EARNED_POINTS, PLAYER_NAME)
我需要编写一个查询来提供排行榜。
当且仅当玩家通过GROUP='IMPORTANT'达到至少一个目标时,他才能进入排行榜。
例如:
+--------------+
| PLAYER |
+--------------+
| John |
| Bill |
| Bob |
| Willy |
+--------------+
+-------------------+
| ALL_GOALS |
+-------------------+
| A, IMPORTANT, 100 |
| B, IMPORTANT, 200 |
| C, OTHER, 10 |
| D, OTHER, 10 |
+-------------------+
+--------------+
| GOALS_REACHED|
+--------------+
| A, 100, John |
| B, 200, Willy|
| C, 10, Bob |
| D, 10, Bob |
+--------------+
我希望在我的排行榜中只看到 John 和 Willy
【问题讨论】:
-
GOALS_REACHED 表中的点与 ALL_GOALS 表中的点是否相同?如果是,那么为什么需要在 GOALS_REACHED 表中重复它们?这是一个糟糕的数据模型,只会产生问题。
-
如果约翰实现了不止一个目标(甚至可能不止一个重要目标)怎么办?你需要给他看多次吗?那么——你为什么要关心积分呢? “排行榜”不取决于获得的总积分或类似的东西吗?你的问题中没有提到它。请澄清。
-
嗨@mathguy,GOALS_REACHED 中的点可能不同,因为ALL_GOALS 在其生命周期中可能会发生变化,而我的老板不想追踪这些变化。那么目标 A 第 1 天可以有 100 分,第 100 天可以有 50 分。