java - 使用 JDBC 透视非常大的表

标签 java mysql sql 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     |
---------------------------------

我想要的是像这样的第三个表。

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
...

这将使您的系统更具可扩展性,并且应该消除您谈论的那些问题

关于java - 使用 JDBC 透视非常大的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20842422/

相关文章:

java - 跳转到 JEditorPane 中的内部 anchor

MySQL慢查询不规律地飙升

mysql - 在innoDB中强制隐藏聚集索引

MySQL 查询每月产生的数量

Java正则表达式与两个条件混淆

java - 如何将原始 Java servlet 映射到 web.xml 中的 HTML 文件?

mysql - 数据库中每个数据的类别由一个特定的 id 并且只允许为每个类别 mysql 获取 2

sql - 需要在sql中删除连续三天不包括周末和节假日

sql - 创建 3 个月、6 个月和 12 个月的评估查询

java - Clojure reify - 使用另一个宏自动实现 Java 接口(interface)?