我有一个包含调查结果的数据表,我想对这些数据进行某些计算。数据结构有点像这样:(忽略所有相似的数据,我剪切并粘贴所有行)
____________________________________________________________________________________
| 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#中构建数据的最佳方法是什么才能让它尽可能简单易用? 我已经开始为每个实体制作课程,但是我在某个地方感到困惑,一些东西停止了工作。所以在我继续沿着这条路走下去之前,我想知道是否还有其他更好的方法呢?
(每个人也可以拥有描述变量,如年龄组等,但这对基本功能并不重要。)
我们当前的解决方案在从数据库请求数据时在查询中内联所有计算。这是有效的,但它很慢,查询的数量等于问题*个人+密钥*个人,如果是个别查询,这可能很多。
有什么建议吗?
答案 0 :(得分:0)
我怀疑通过将计算从数据库移动到应用程序可以获得很大的改进。
我建议您查看数据库设计,看看是否可以通过规范化和添加索引来改进它。大多数数据库都带有可以根据给定查询提出设计建议的工具。然后查看您正在运行的查询,以查看是否有更有效的方法来编写查询。我个人看到过将O(n)重写为O(log n)的查询。如果您在设计和查询方面需要帮助,那么您可以轻松分享。
答案 1 :(得分:0)
平均值,标准差和其他一些事情可以通过对数据进行一次传递并累计计数,总和,数据点的平方和来计算。这在计算机之前的几天被利用,通过在卡片上冲压所有数据,并且通过卡片机(通过插入电路板的电线编程)运行它,并累积这些总数,然后进行计算。
这是一个无聊的历史课,除了它说明您可以在从数据库中获取数据时按组对数据进行半概括。
在描述性(组)列上设置索引也是值得的。
答案 2 :(得分:0)
在名为" q"的列下列出1,7,5等值。在您的表格中表示实际答案或正确答案的数量?
无论如何,您可以使用包含以下字段的数据表来整理数据:
GroupID,IndividualID,KeyID,SubKeyID,QuestionID,Answer