将值插入表中的新列,根据来自同一表的数据计算

时间:2011-10-14 14:23:53

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

我代表一个想要进行查询的炒人,在选择4列(课程,距离,上课和课程)时计算赢得比赛的平均时间,对这些列进行分组并对这些列进行排序。然后将计算的平均值插入同一个表中。这可能吗?

他正在尝试使用这种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?

2 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:0)

clf;
x = randn (100, 1);
y = randn (100, 1);
cmap=[];
for R = 1:255
  for G = 1:255
    for B = 1:255
      if (size(cmap) ./ [1,3] == size(x))
        break;
      endif
      cmap=[cmap;R/255,G/255,B/255];

    endfor
    if (size(cmap) ./ [1,3] == size(x))
        break;
    endif
  endfor 
 if (size(cmap) ./ [1,3] == size(x))
        break;
 endif 
endfor

colormap(cmap);

scatter(x,y,20, 1:100);

最初

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

我想添加一个新列作为difference_salary,并且应保持永久性,因此我创建了一个新表Table name = CPY_JOBS; that containing (job_id, job_title, max_salary, min_salary) 并从D_JOBS获取了所有数据(max_salary-min_salary)计算

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