【问题标题】:Insert A Value Into A New Column In A Table, Calculated From Data From Same Table将值插入表中的新列,根据同一表中的数据计算
【发布时间】:2011-10-14 14:23:53
【问题描述】:

我代表一个想要进行查询的油炸食品,在选择 4 列(COURSE、DISTANCE、GOING 和 CLASS)时计算赢得比赛的平均时间,对这些列进行分组并对这些列进行排序。然后将计算出的平均值插入同一个表中。这可能吗?

他正在尝试使用这种 SQL 语句,这显然不是一个语句,因为我不知道如何组合起来。

感谢您的帮助!

INSERT 
INTO Table1 (AVGTIMECOLUMN) VALUES (AVERAGE)
SELECT Table1.COLUMN1, Table1.COLUMN2, Table1.COLUMN3, Table1.COLUMN4 Avg(Table1.TIME) AS AVERAGE, 
FROM Table1
GROUP BY Table1.COLUMN1, Table1.COLUMN2, Table1.COLUMN3, Table1.COLUMN4
ORDER BY Table1.COLUMN1, Table1.COLUMN2, Table1.COLUMN3, Table1.COLUMN4;

或者我是否需要执行 UPDATE 查询并仅使用计算设置 AVG_WEIGHT?

【问题讨论】:

    标签: mysql sql sql-update average sql-insert


    【解决方案1】:

    如果您真的需要能够做到这一点,那么是的,您将使用 UPDATE 声明(如果我正确理解您的问题)。更重要的是,在 100 个案例中,有 99 个案例根本不应该这样做。

    数据库设计的主要规则之一是您不应该存储冗余数据。除了占用额外的空间外,它还存在数据不一致的问题。例如,有人返回表并更新派生列所基于的列之一,但不更新派生列。现在错了。在某些情况下,您最终会遇到不知道该相信哪组数据的情况。

    如果 MySQL 支持计算列,那么您可以在表上定义一个。否则,您通常应该在运行时计算此值。

    有时出于性能原因,对数据库进行非规范化以存储冗余数据。不幸的是,在大多数情况下,开发人员在没有首先确认确实存在无法以其他方式修复的性能问题的情况下这样做。大多数想要使用此模式的开发人员都确信他们的 是他们应该忽略此设计规则的特殊情况。但根据我的经验,在大多数情况下他们是错误的。

    【讨论】:

    • 平均值是根据特定课程的所有获胜次数计算得出的,然后作为与特定课程相关的值插入。当我进一步询问他时,我刚刚发现他将所有东西都存储在一张桌子上,显然你对冗余的看法......所以我已经指示他制作第二张桌子,我认为他已经做过了!所以我相信新的计算只是选择获胜时间是课程ID =“1”并计算平均值然后将其插入课程信息表?!感谢您的快速响应和帮助!
    • 即使采用这种方法,您仍然会遇到冗余数据的问题,随着时间的推移,这些数据可能会变得不一致。
    【解决方案2】:
    CREATE TABLE D_JOBS AS 
    
    SELECT JOB_ID, JOB_TITLE, MAX_SALARY, MIN_SALARY,(MAX_SALARY-MIN_SALARY)AS DIFF_SALARY FROM CPY_JOBS
    
    WHERE (MAX_SALARY-MIN_SALARY) >0
    

    最初

    Table name = CPY_JOBS; that containing (job_id, job_title, max_salary, min_salary)
    

    我想添加一个新列作为 difference_salary 并且应该保持永久,所以我创建了一个新表作为 D_JOBS 并使用 (max_salary-min_salary) 计算从 CPY_JOBS 获取所有数据


    我想你会从查询中得到一个想法谢谢。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-12
      • 1970-01-01
      • 1970-01-01
      • 2014-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多