如何根据 table 上的 select 语句的结果创建视图?

How do I create a view from the results of a select statement on the same table?

我有一个包含三列的 table。 a material 的 id、它所属的家族(有某种分组)、测试类型和该测试的结果作为数字 (1-4)。测试类型指向带有测试列表的 table,结果是一个数字。如果合适,我正在尝试创建一个 query/view,这样我就可以得到一个 material 系列的结果,并且对于每个测试都有一个新列,其中的单元格显示所有 material家族成员...

我在想,因为它是针对一个小项目的,而且我知道测试(不认为它们会改变但不确定)我可以将测试(它们是其中的 6 个)添加为列在 table 而不是将其作为数据,但我觉得不合适。此外,将来可能会添加测试。但与此同时,添加一列并不难,我只需更改平均值代码以忽略特定值的值,这样我就可以在添加测试之前区分值。

那么我将如何着手去做,我这样做的方式是不是一个好主意?

现在我所拥有的可能是为每对 family/test 创建一个 select 语句,然后以某种方式创建一个视图(它是一个虚拟的 table)结果那些查询。

所以如果 table 是

test_result
family_id | material_id | test_id | result

查询将是

SELECT AVG(result) AS 'TEST'
FROM test_result
WHERE family_id = 'family_id'
  AND test_id = 'test_id;

但我不确定如何继续,或者是否有比这样做 6 次并以某种方式组合结果更好的方法

我不确定你对数据库设计了解多少。

你问的问题,关于在一个 table 中有 6 列 test_id 与另一个 table 以 family_id 和 test_id 作为主键(唯一标识符)是数据库设计的基础。它与第一范式有关。如果您愿意,您可以研究第一范式和一般数据规范化。

对于这种情况,这是一个过于简化的版本。

六列合一 table 方法存在两个大问题。

第一个是这样的:当他们改变主意并添加第七个测试时会发生什么?如果这从未发生,则一切正常。但如果不是,您必须通过添加另一列来更改 table,并且您必须更改任何引用 table 的查询。如果这只是您的一个查询,您可以对其进行管理。如果有数百个查询可能引用 table,并且其中一些在可能需要维护周期来修改查询的应用程序中,这可能是一场噩梦。这就是为什么数据库教程充满了 material 如果您只做这个小项目,您可能不需要学习这些内容。

第二个是这样的:如果您必须编写一个查询来查找每次出现的 testid = 4,而不管该值存储在六列中的哪一列中,会发生什么情况?您将不得不编写一个在 WHERE 子句中包含五个 OR 运算符的查询。这很乏味,容易出错,而且运行缓慢。同样,这可能永远不是问题。

通常更好的方法是创建第三个 table,其中 family_id 和 test_id 作为列,结果可能是第三列(我不确定 material_id是……有没有materialtable?)

第一个 table,家庭,有 family_id 和任何仅取决于家庭的数据,例如 family_name。

第二个 table,测试,有 test_id 和任何只依赖于测试的数据,比如 test_name。

第三个 table 包含依赖于两者的数据。

然后编写一个将所有三个 table 连接在一起的视图,使其看起来像您想要的那样使用它。

如果这涵盖了很多您已经知道的概念,我深表歉意。同样,我无法从你的问题中判断出来。