在数据表中计算

时间:2010-03-29 12:32:35

标签: c# matrix analysis

我有一个包含调查结果的数据表,我想对这些数据进行某些计算。数据结构有点像这样:(忽略所有相似的数据,我剪切并粘贴所有行)

____________________________________________________________________________________
| group |individual |        key         |        key         |        key         |
|       |           |subkey|subkey|subkey|subkey|subkey|subkey|subkey|subkey|subkey|
|       |           |q|q|q |q |q  |q|q|q |q|q|q |q |q  |q|q|q |q|q|q |q |q  |q|q|q |
|-------|-----------|-|-|--|--|---|-|-|--|-|-|--|--|---|-|-|--|-|-|--|--|---|-|-|--|
|   1   | 0001      |1|7|5 |1 |3  |1|4|1 |1|7|5 |1 |3  |1|4|1 |1|7|5 |1 |3  |1|4|1 |
|   1   | 0002      |1|7|5 |1 |3  |1|4|1 |1|7|5 |1 |3  |1|4|1 |1|7|5 |1 |3  |1|4|1 |
|   1   | 0003      |1|7|5 |1 |3  |1|4|1 |1|7|5 |1 |3  |1|4|1 |1|7|5 |1 |3  |1|4|1 |
|   2   | 0004      |1|7|5 |1 |3  |1|4|1 |1|7|5 |1 |3  |1|4|1 |1|7|5 |1 |3  |1|4|1 |
|   2   | 0005      |1|7|5 |1 |3  |1|4|1 |1|7|5 |1 |3  |1|4|1 |1|7|5 |1 |3  |1|4|1 |
|   3   | 0006      |1|7|5 |1 |3  |1|4|1 |1|7|5 |1 |3  |1|4|1 |1|7|5 |1 |3  |1|4|1 |
|   4   | 0007      |1|7|5 |1 |3  |1|4|1 |1|7|5 |1 |3  |1|4|1 |1|7|5 |1 |3  |1|4|1 |
------------------------------------------------------------------------------------

所以,每个人都属于一个群体,并回答了一些问题。这些问题始终按键和子键分组。

是否有任何简单的方法可根据分组计算平均值,偏差和类似值。 像

这样的东西
public float getAverage(int key, int individual);
float avg = getAverage(5,7);

我认为我要问的是在C#中构建数据的最佳方法是什么才能让它尽可能简单易用? 我已经开始为每个实体制作课程,但是我在某个地方感到困惑,一些东西停止了工作。所以在我继续沿着这条路走下去之前,我想知道是否还有其他更好的方法呢?

(每个人也可以拥有描述变量,如年龄组等,但这对基本功能并不重要。)

我们当前的解决方案在从数据库请求数据时在查询中内联所有计算。这是有效的,但它很慢,查询的数量等于问题*个人+密钥*个人,如果是个别查询,这可能很多。

有什么建议吗?

3 个答案:

答案 0 :(得分:0)

我怀疑通过将计算从数据库移动到应用程序可以获得很大的改进。

我建议您查看数据库设计,看看是否可以通过规范化和添加索引来改进它。大多数数据库都带有可以根据给定查询提出设计建议的工具。然后查看您正在运行的查询,以查看是否有更有效的方法来编写查询。我个人看到过将O(n)重写为O(log n)的查询。如果您在设计和查询方面需要帮助,那么您可以轻松分享。

答案 1 :(得分:0)

平均值,标准差和其他一些事情可以通过对数据进行一次传递并累计计数,总和,数据点的平方和来计算。这在计算机之前的几天被利用,通过在卡片上冲压所有数据,并且通过卡片机(通过插入电路板的电线编程)运行它,并累积这些总数,然后进行计算。

这是一个无聊的历史课,除了它说明您可以在从数据库中获取数据时按组对数据进行半概括。

在描述性(组)列上设置索引也是值得的。

答案 2 :(得分:0)

在名为" q"的列下列出1,7,5等值。在您的表格中表示实际答案或正确答案的数量?

无论如何,您可以使用包含以下字段的数据表来整理数据:

  

GroupID,IndividualID,KeyID,SubKeyID,QuestionID,Answer