![](/img/trans.png)
[英]Stream very large table via spring-data-jdbc Resultset.TYPE_FORWARD_ONLY READ_ONLY
[英]Pivoting a very large table with JDBC
我想从另外两个表创建一个新表。 问题是我有太多的列,它会导致一切崩溃。
我拥有的第一个表是用户和对象之间的“连接”。
Table User
| id | user_id | o54879 | o54880 | o87984 | ...
--------------------------------------------------------
| 1 | 25488 | 0 | 1 | 0 | ...
--------------------------------------------------------
| 2 | 35487 | 0 | 1 | 1 | ...
--------------------------------------------------------
第二个表将每个对象分配给一个类别:
Table Cat
| id | object_id | category |
---------------------------------
| 1 | o54879 | 1 |
---------------------------------
| 2 | o54880 | 2 |
---------------------------------
| 3 | o56457 | 2 |
---------------------------------
| 4 | o59782 | 7 |
---------------------------------
我想要的是像这样的第3张桌子。
Table UserGroupedByCat
| id | user_id | c1 | c2 | c3 | ...
---------------------------------------------
| 1 | 25488 | 0.4 | 0.1 | 0.7 | ...
---------------------------------------------
| 2 | 35487 | 0.01 | 0.75 | 0.2 | ...
---------------------------------------------
c1,c2,c3 ......应该是用户对每个类别的平均值。
主要问题是我在数据库中有500个对象,当我尝试构建像这样的SQL查询时,我会使一切崩溃:
INSERT INTO UserGroupedByCat (user_id, C1, C2, C3, C4, C5, C6, c7)
SELECT user_id,
((o34508629+o52965151+o52630004+o34518676+...)/<sum of all objects>),
((o62846406+o50349529+...)/<sum of all objects>), ...
FROM `User`;
是否有更好(更快)的方式来进行此类查询?
我只用3列重建你的第一个表(你也可以有一个数字ID,但我看你还是不用它):
USER_ID CATEGORY_ID SCORE
25488 o54879 0
25488 o54880 1
25488 o87984 0
...
35487 o54879 0
35487 o54880 1
35487 o87984 1
...
这将使您的系统具有更高的可扩展性,并且可以消除您谈论的那些问题
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.