【问题标题】:MySQL column to show the sum of column in another tableMySQL 列显示另一个表中列的总和
【发布时间】:2021-09-04 00:08:54
【问题描述】:

我在 SQL 中有两个表都保存用户的 ID。

表帐户

ID    username     Points
1       abc          ? 
2       def          ?

表事务

ID    Points
1       10
1       -5
2       20

表帐户列点应具有表事务中该 ID 的总和。所以在表一中,输出应该是 ID 1 为 5 和 id 2 为 20 的点。

我是 MySQL 新手,所以如果您能简单地解释一下查询,将不胜感激。

【问题讨论】:

  • 您是否已经尝试过一些查询?如果你一无所知,请阅读“inner join”、“Group by”、“sum”
  • 我什么都试过了。我一无所知

标签: mysql sql sum sql-update


【解决方案1】:

您需要UPDATE 声明:

UPDATE Accounts a
SET a.Points = (SELECT SUM(t.Points) FROM Transactions t WHERE t.ID = a.ID)

相关子查询返回每个ID的点总和。

【讨论】:

  • 有没有办法让这个查询始终成为该列的值?我的意思是,我每次都必须运行这个查询来更新值,对吗?
  • @Derik002 如果这不是学校作业,那么您根本不应该这样做。存储这种类型的值总是一个坏主意。表Accounts 中的列Points 甚至不应该存在。如果您想获得每个 id 的点的总和,那么您应该通过加入表在 SELECT 查询中获得它。检查这个:dbfiddle.uk/…
  • 其实不是学校作业。感谢您的提示,我会将其与主数据库分开
【解决方案2】:

我认为这不适合您的数据。既然您可以随时从表中获取列Point 的值,为什么需要多路复用它,并且每次更新都需要更多维护以保持数据的准确性?而是创建一个包含外部连接的视图,例如

CREATE OR REPLACE VIEW v_acc_trs AS
SELECT a.ID, a.username, SUM(t.Points) total_points 
  FROM Accounts a 
  LEFT JOIN Transactions t
    ON t.ID = a.ID
 GROUP BY a.ID, a.username

并在任何时候使用它来选择具有所需条件的数据:

SELECT * FROM v_acc_trs WHERE ...

【讨论】:

    猜你喜欢
    • 2021-12-26
    • 2017-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多