用于快速收集数据的大数据库SQL查询

时间:2018-04-03 22:07:36

标签: mysql sql

我正在尝试编写一个查询来获取案例的付款数量,以及包含超过1,000,000人的数据库中的特定案例数据。因为我正在处理这么大的数据库,所以我希望尽可能少地收集所需的所有数据,但在编写SQL查询时我仍然是初学者。我的目的是为K-means聚类算法构建一个输入矩阵。这就是我正在使用的。

注意:这些数据不是我的真实数据,而是我正在使用的数据的解剖表示。

对于表格PERSON主键ID

_______PERSON_______
|ID   |Name    |Age|
====================
|1000 |Roger   |23 |
|1001 |Mary    |51 |
|1002 |Mike    |29 |
|1003 |Scott   |31 |

对于表格CASEIDCase_No一起是复合主键。此表中的IDPERSON外键

__________CASE___________
|ID   |Case_No |Case_Amt|
=========================
|1000 |01      |230.22  |
|1000 |02      |30.31   |
|1000 |03      |13.96   |
|1001 |01      |112.12  |
|1002 |01      |30.24   |
|1003 |01      |520.12  |
|1003 |02      |45.37   |

对于表格PAYMENT主键Pay_IDIDCase_NoCASE表的外键

__________________PAYMENT____________________
|Pay_ID|ID  |Case_No|Pay_Amt|Int_Amt|Clt_Amt|
=============================================
|100   |1000|01     |30.00  |10.00  |24.00  |
|101   |1000|01     |40.00  |10.00  |30.00  |
|102   |1000|01     |130.22 |10.00  |84.13  |
|103   |1000|02     |30.31  |0.00   |20.92  |
|104   |1000|03     |10.56  |3.40   |8.37   |
|105   |1001|01     |100.00 |12.12  |67.27  |
|106   |1003|01     |200.00 |0.00   |120.00 |
|107   |1003|01     |200.00 |0.00   |120.00 |
|108   |1003|02     |45.37  |0.00   |27.22  |

我基本上想要获取我想要的所有数据以及特定的IDCase_No。输入矩阵中的每个实例都包含一个案例的属性。

这就是我想要输入矩阵的每一行的样子。

|ID_and_Case_No|Age|Case_Amt|Number_of_Payments|Paid_In_Full|
=============================================================
|1000_01       |23 |230.22  |3                 |Yes         |
|1000_02       |23 |30.31   |1                 |Yes         |
|1000_03       |23 |13.96   |1                 |Yes         |
|1001_01       |51 |112.12  |1                 |Yes         |
|1002_01       |29 |30.24   |0                 |No          |
|1003_01       |31 |520.12  |2                 |No          |
|1003_02       |31 |45.37   |1                 |Yes         |

我希望能够在尽可能短的时间内创建这个矩阵。我想用尽可能少的查询收集所有这些数据。甚至可以单独使用一个查询来收集这些数据吗?我知道对于Paid_in_Full属性,我需要将Pay_AmtInt_Amt字段一起添加,然后根据Case_Amt表中的CASE字段进行检查

我目前的做法是通过此查询获取ID表中的所有Case_NoCASE字段。

SELECT ID,Case_No FROM CASE;

然后我将它们存储在python列表中,并使用此查询查询PAYMENT表。

SELECT COUNT(Pay_ID),Pay_Amt,Int_Amt FROM PAYMENT WHERE ID in (?,?,?,...,n) and Case_No in (?,?,?,...,n) GROUP BY Pay_Amt,Int_Amt

然后,我遍历PAYMENT表格中的每笔付款,并将Pay_AmtInt_Amt字段加在一起,并根据Case_Amt字段进行检查。但是,此查询中的COUNT(Pay_ID)字段不能为每个案例提供正确的付款次数。它只给我一行付款而不是正确的金额。这种做法也需要2个小时才能完全收集所有数据并填充输入矩阵。

在编写SQL查询时,我仍然是初学者,但我正在寻找一个查询来结束所有查询。一个能够获取我想要的所有数据并在最短的时间内将其格式化的方法。

0 个答案:

没有答案