给出table_player
Players. Score
A. 34
B. 45
C. 34
D. 20
我想使用一个更新触发器,当一个人的得分改变时,它会自动更新玩家的排名,并且我也希望该排名列作为表中的新列保留。
答案 0 :(得分:1)
这不是触发器的真正好用,因为1)您必须从要插入的表中进行选择,以及2)每次插入时都可能必须更新表中的所有行新的一行。除非您创建一个非常复杂的方案来避免这些错误,否则它们都可能导致数据变异。
但是,视图可以有效地完成相同的事情。唯一的区别是视图不存储数据,而是在您每次访问表时仅进行排名计算。如果您的数据库支持分析功能,则将非常简单:
CREATE VIEW table_player_rank AS
SELECT player, score, rank() OVER (ORDER BY score) AS player_rank
FROM table_player;