【问题标题】:Mysql query to dynamically convert rows to columns and sumMysql查询动态将行转换为列并求和
【发布时间】:2018-03-23 17:07:53
【问题描述】:

MySQL 能否将列转换为行,动态添加行所需的列。我尝试过其他解决方案,但它们似乎无法解决我的独特情况。 这是有数据的表

表 A

    +---------+-------------+------+
    |driver_id|stage_name   |points|
    +---------+-------------+------+
    |1        |Stage 1 50cc |20    |
    +---------+-------------+------+
    |1        |Stage 2 50cc |17    |
    +---------+-------------+------+
    |2        |Stage 1 50cc |17    |
    +---------+-------------+------+
    |2        |Stage 2 50cc |15    |
    +---------+-------------+------+
    |3        |Stage 1 75cc |17    |
    +---------+-------------+------+
    |3        |Stage 2 75cc |15    |
    +---------+-------------+------+
    |4        |Stage 1 75cc |15    |
    +---------+-------------+------+
    |4        |Stage 2 75cc |20    |
    +---------+-------------+------+

我希望查询格式如下

    +---------+-------------+-------------+-------------+-------------+--------------+
    |driver_id|Stage 1 50cc |Stage 2 50cc |Stage 1 75cc |Stage 2 75cc | Total Points |
    +---------+-------------+-------------+-------------+-------------+--------------+
    |1        |     20      |     17      |    null     |    null     |    37        |
    +---------+-------------+-------------+-------------+-------------+--------------+
    |2        |     17      |     15      |    null     |    null     |    32        |
    +---------+-------------+-------------+-------------+-------------+--------------+
    |3        |     null    |     null    |     16      |     15      |    31        |
    +---------+-------------+-------------+-------------+-------------+--------------+
    |4        |     null    |     null    |     15      |    20       |    35        |
    +---------+-------------+-------------+-------------+-------------+--------------+

如您所见,最后一列的计算基于该驱动程序的各个阶段的总和。 总和现在不是很重要,但首先要有分数,但如果一切皆有可能,那就太棒了。

【问题讨论】:

  • 好吧,我不这么认为。但是 MySQL 有一个可能很有趣的 JSON 列类型。调查一下。
  • 规范化您的架构,并处理应用程序代码中的数据显示问题。

标签: mysql


【解决方案1】:

我会以这种方式存储数据(或者可能进一步标准化):

+-----------+----------+----+--------+
| driver_id | stage_no | cc | points |
+-----------+----------+----+--------+
|         1 |        1 | 50 |     20 |
|         1 |        2 | 50 |     17 |
|         2 |        1 | 50 |     17 |
|         2 |        2 | 50 |     15 |
|         3 |        1 | 75 |     17 |
|         3 |        2 | 75 |     15 |
|         4 |        1 | 75 |     15 |
|         4 |        2 | 75 |     20 |
+-----------+----------+----+--------+

然后我会使用这个查询:

SELECT driver_id, stage_no, cc, points FROM my_table ORDER BY driver_id,stage,cc;

然后我将在应用程序代码中处理所有其他事情。

【讨论】:

    猜你喜欢
    • 2013-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-20
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    相关资源
    最近更新 更多