1

我代表一个油炸的人询问,他想做一个查询,计算在选择 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?

4

2 回答 2

1

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

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

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

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

于 2011-10-14T14:37:15.037 回答
0
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 并且应该保持永久性,所以我创建了一个新表并从(max_salary-min_salary) 计算中D_JOBS获取所有数据CPY_JOBS


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

于 2016-07-24T09:13:07.697 回答