我正在尝试编写一个查询来获取案例的付款数量,以及包含超过1,000,000人的数据库中的特定案例数据。因为我正在处理这么大的数据库,所以我希望尽可能少地收集所需的所有数据,但在编写SQL查询时我仍然是初学者。我的目的是为K-means聚类算法构建一个输入矩阵。这就是我正在使用的。
注意:这些数据不是我的真实数据,而是我正在使用的数据的解剖表示。
对于表格PERSON
,主键为ID
。
_______PERSON_______
|ID |Name |Age|
====================
|1000 |Roger |23 |
|1001 |Mary |51 |
|1002 |Mike |29 |
|1003 |Scott |31 |
对于表格CASE
,ID
和Case_No
一起是复合主键。此表中的ID
是PERSON
的外键。
__________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_ID
。 ID
和Case_No
是CASE
表的外键。
__________________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 |
我基本上想要获取我想要的所有数据以及特定的ID
和Case_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_Amt
和Int_Amt
字段一起添加,然后根据Case_Amt
表中的CASE
字段进行检查
我目前的做法是通过此查询获取ID
表中的所有Case_No
和CASE
字段。
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_Amt
和Int_Amt
字段加在一起,并根据Case_Amt
字段进行检查。但是,此查询中的COUNT(Pay_ID)
字段不能为每个案例提供正确的付款次数。它只给我一行付款而不是正确的金额。这种做法也需要2个小时才能完全收集所有数据并填充输入矩阵。
在编写SQL查询时,我仍然是初学者,但我正在寻找一个查询来结束所有查询。一个能够获取我想要的所有数据并在最短的时间内将其格式化的方法。