透视表以巧妙的方式 - 在MySQL中

时间:2016-12-21 21:16:43

标签: mysql sql pivot-table

我有MySQL database。有一个带有项目标记的日志表。我需要找出每个项目有什么标记,以及专家有没有投票给这个项目。所以,表的结构是这样的:

| ID_MARK | ID_EXPERT | ID_PROJECT | mark_1 | mark_2 | ... | mark_n | TOTAL_MARK |
---------------------------------------------------------------------------------
|  1      |   1       |   1        |   x    |   x    | ... |   x    |      12    |
|  2      |   1       |   2        |   x    |   x    | ... |   x    |      13    |
|  3      |   2       |   1        |   x    |   x    | ... |   x    |      42    |
|  4      |   1       |   3        |   x    |   x    | ... |   x    |      34    |
|  5      |   2       |   3        |   x    |   x    | ... |   x    |      22    |
|  6      |   3       |   4        |   x    |   x    | ... |   x    |      55    |
|  7      |   3       |   2        |   x    |   x    | ... |   x    |      11    |

我想通过一些查询获得的结构是:

project id | ID_EXPERT_1    | ID_EXPERT_2   |   ID_EXPERT_3 | ID_EXPERT_4 |
         1 |    12          |   42          |     null      |   null      |
         2 |    13          |   null        |     11        |   null      |
         3 |    34          |   22          |     null      |   null      |
         4 |    null        |   null        |     55        |   null      |

我知道如何通过小请求在数据库外部创建这一切,但我想升级我的知识以便能够创建这样的硬查询。该查询可能效率不高或速度不快,但这里没有必要。

我读过有关虚拟表但不确定是否可以在这里使用mysql实现它们?

使用MySQL可以用什么来创建这样的查询结果?

在标记为重复之前:

我在stackoverflow上读到了有关pivot的信息。我的问题更深入。

在stackoverflow的其他示例中,人们展示了查询实践,他们知道了潜在列的数量,并编写了完全相同的case语句。我的问题是如何进行查询,这将解决这个问题。这将创建一个像我在编程语言中所做的查询,如:

 $experts = get_experts_ids_from_db();
 foreach($experts as $expert){
  ...
 }

我知道可以在长查询文本中的MsSQL中创建@variables和虚拟表来存储临时数据。但是在mysql中是否可能?

0 个答案:

没有答案