【发布时间】:2020-02-10 11:16:40
【问题描述】:
我的表中有此架构下的数据 (AVG_TEAM 字段为 AVG(AVG_OK),其中 TEAM_ID = TEAM_ID in line 和 MONTH = MONTH in line)
DRIVER_ID | MONTH | TEAM_ID | AVG_OK | AVG_TEAM
----------------------------------------------------
005 201901 XXXX 81 84
005 201902 XXXX 84 82
005 201903 XXXX 81 80
005 201904 ZZZZ 84 75
070 201901 RRRR 77 80
070 201902 RRRR 80 80
etc
有些人希望在整个月内跟踪每个驱动程序的演变。预期的架构是:
DRIVER_ID | TEAM_ID | AVG_OK_MONTH1 | AVG_OK_MONTH2 | AVG_OK_MONTH3 | ... | AVG_OK_MONTH12 | GLOBAL_AVG | TEAM_GLOBAL_AVG
005 XXXX 81 84 81 ... NULL 82 ?
070 RRRR 77 80 NULL ... NULL 78.5 ?
etc
正如您很可能看到的那样,这种方法已经存在很大的缺陷,因为 TEAM_ID 可能会随着月份而变化,因此 AVG_TEAM 字段不能用于轻松计算 TEAM_GLOBAL_AVG 字段
但是假设我们消除了这个缺陷,并认为 TEAM_ID 不会改变。 我看不到将第一个模式转换为另一个模式的简单方法,无论是使用 SQL 还是使用 PHP(从未这样做过)。
我想到了一些在 PHP 中使用数组的非常难看的解决方案,但是必须有更好更简单的方法吗?欢迎任何见解。
【问题讨论】:
-
这在 PHP 中可能比在 SQL 中更容易做到...
-
这就是所谓的“pivot”——跟随标签。
-
对于 MariaDB 中的数据透视,请参阅 stackoverflow.com/a/56670844/1766831
标签: php sql mariadb pivot-table