如何将高级计算集成到数据库字段中?
Posted
技术标签:
【中文标题】如何将高级计算集成到数据库字段中?【英文标题】:How can I integrate advanced computations into a database field? 【发布时间】:2010-03-26 13:21:17 【问题描述】:我的生物学研究涉及细胞结构的测量,因为它会在整个观察过程中改变长度(每分钟捕获图像几个小时)。随着我的数据集变得越来越大,我试图将它们存储在 Access 数据库中,我想从该数据库中对它们的大小变化执行各种查询。
我知道 SELECT 语句可以合并一些数学排列,但是我无法合并许多必要的计算(可能是由于我缺乏知识)。例如,一种计算涉及确定具体定义的增长时期的变化率。此计算完全取决于保存在表中的原始数据,因此我没有这样做,在输入字段之前仅在 excel 中计算它是合适的。
所以我的问题是,执行此计算的最合适方法是什么。 我应该尝试在我的 QUERY 中将一个巨大的 SELECT 计算串在一起,还是有办法使用另一种可以调用的语言(我知道 perl?)来填充新的查询字段?
我不是在找人来编写代码,只是在哪里适合合并每个步骤。另外,我目前正在使用 Office Access,但我会对任何 mysql 答案感兴趣,因为我以后可能会迁移到这个平台。谢谢大家!
【问题讨论】:
如何列出一些示例数据行,然后列出这些给定行的示例查询结果集,并解释公式。这里的某个人将能够获取该信息并编写查询。编辑您的问题并包含此信息。 请提供@KM 要求的信息。并且,请不要在不关闭所有用户友好性废话的情况下使用 Excel 和 Access 进行认真的研究。由于自动更正和自动格式化之类的原因,我已经看到许多错误蔓延到倒霉的研究生的表格中。此外,您在电子表格中所做的事情并不像您在代码中所做的那样容易复制。 最好的例子是什么?不接受 html 表格 使用CODE功能,或者将纯文本格式的数据包装在中。 【参考方案1】:您可以将您的逻辑和数学封装到 VBA 中的自定义函数中,然后在您的 select 语句中调用它。这种方法也适用于其他数据库引擎,但确切的措辞可能略有不同
【讨论】:
这就是我的想法,但我想我可能会接受我得到的其他建议并转移到 SQL server 或 mySQL【参考方案2】:在 SQL 中执行此操作会快得多,但调试起来会困难得多(我猜您正在查看诸如 ANOVA、t 检验、chi^2 等之类的东西)。
话虽如此,您可能希望存储和计算中间值,例如自上次测量以来的延迟以及测量的变化。
OTOH,您描述的指标在 SQL 中非常简单:
一个计算涉及确定特定增长时期内的变化率
C.
【讨论】:
+1,我会转储 MS Access 去购买 SQL Server 2008 的免费版本:microsoft.com/express/database,它具有比 MS Access 更多的功能(如 ROW_NUMBER(),你'会需要),但仍然可以轻松地发挥出色。 除了导入一些表之外,我还没有在访问方面做更多的事情,如果您认为 SQL Server 2008 会更好地工作,我会接受提示。你如何建议我可以与 excel '配合' 如果您熟悉 MySQL,我不会对 SQL Server 感到厌烦。此外,请记住,Access 是一种数据库应用程序开发工具,附带默认数据库引擎 Jet/ACE。您可以继续使用 Access 作为前端来编写查询、编辑数据和打印报告,同时使用链接表来表示以 Access 可以与之交互的任何多种数据格式存储的数据。这包括 SQL Server 和 MySQL 等。 总的来说,尽管多年来一直以 MSAccess 程序员为生,但我建议人们避免使用 MSAccess - 但是对于管理中等数据量的单用户应用程序来说它很好(对于多用户 /大数据集再想一想)。但是 VBA 是一头猪。【参考方案3】:如果您需要使用复杂计算的结果填充字段,使用成熟的编程语言(例如 Perl)进行计算会比尝试使用 SQL 更容易。
Perl 有一个非常好的数据库 API,“DBI”,它包含用于人类已知的几乎所有数据库引擎的驱动程序。这是一篇关于 DBI 的简短文章:
http://www.perl.com/pub/a/1999/10/DBI.html
【讨论】:
然后您可能会忘记 SQL 提供的基于集合的解决方案的强大功能,并创建一个缓慢的循环来处理每一行(但使用您选择的语言)。 我的主要问题是,填充完全基于数据库中已经找到的其他字段的表字段是多么不合适。我最常用的计算是斜率(速率),我用它在不同的平均值组之间进行大量比较。使用 SELECT 创建包含此信息的 QUERY TABLE 或仅在 UPDATE 上计算此信息并将其作为唯一字段包含在主表中会更正确吗? 如果计算在性能上比较昂贵,可以选择存储。带有触发器的数据库对此非常有帮助,因为它们可以在计算的源字段发生变化时更新数据。请注意,Access 2010 添加了一种新形式的嵌入式宏,它存储在表级别并且可以像触发器一样运行,称为数据宏。【参考方案4】:在计算选项、精度等方面,您将受制于 SQL 实现。最好使用一种单独的语言,在其中您可以控制、可扩展性和灵活性来存储您想要和需要的结果。
【讨论】:
如果数据库无法执行必要的数学函数,我会感到惊讶。 OP 没有详细说明计算是什么,但我猜这其中最困难的部分是对行进行分组和组合,而不是数学函数的可用性。 如果数据库以一致和可靠的方式实现数学运算和精度,我会更加惊讶。如果 OP 切换数据库怎么办?这可能需要调试大量 SQL,或者难以发现的错误很容易从有缺陷或不完整的实现中蔓延。 是什么让您认为 MS Access 或 MySql 没有必要的数学运算或者它们不可靠?我怀疑 MS Access 或 MySql 会有错误的数学运算。但是,我认为推测这一点是没有意义的,因为 OP 提供了零细节。 抱歉延迟响应,我不怀疑缺少个别数学函数,只是容易链接在一起。我将在几秒钟内添加上面的示例,但在 excel 中,我目前在另一个字段中定义的一系列测量值上使用斜率和皮尔逊相关系数 (r^2) 函数。即找到第 2 次到第 24 次测量的斜率。 困难的部分将是分组,获取2nd through 24th measurements
,这是一项 SQL 作业,而不是一种单独的语言一次循环遍历一行【参考方案5】:
我建议您将 Access 用作输入、编辑和打印数据的前端工具。您可以将数据存储在任何后端数据库引擎(MySQL、SQL Server 等)中,尽管 Jet/ACE(默认的 Access 数据库引擎)可能完全足够,除非您的数据集变得非常非常大(它是限制为 2GB,但如果您的数据在正常使用期间增长到超过 1GB,您真的不想继续使用它。
不过,对于复杂的统计分析,我建议考虑导出数据并使用适当的统计数据包进行分析。这意味着您的报告可能全部从那里完成。
在这种情况下,您可以利用 Access 的功能来创建一个界面来选择要导出以进行分析的数据集。上次我为客户做这件事时,他们使用 SPSS 进行数据分析,我为他们构建了一个非常灵活的导出界面(他们可以选择他们喜欢的任何变量进行分析)。
这是否是一种有用的替代方法取决于您要进行的分析的范围和类型。如果您正在使用 Access VBA 缺少的许多功能,并且必须从 Excel 中借用它们或为它们编写替换,那么您最好在其他程序中完成所有这些操作。
此外,您的部分或许多或全部计算可能属于表示层而不是 SQL。访问报告在这里有很多功能,如果您要汇总数据,最好在该级别完成,而不是在您的报告基础的 SQL 记录源中。
【讨论】:
以上是关于如何将高级计算集成到数据库字段中?的主要内容,如果未能解决你的问题,请参考以下文章
tableau高级绘图-在tableau中创建雷达图(不修改数据源)
tableau高级绘图-在tableau中创建雷达图(不修改数据源)
使用现有 JSON 文件,如何将此数据上传到 BigQuery 并使用 JSON 文件中的数据计算新字段?