【发布时间】:2013-10-01 10:47:40
【问题描述】:
我在 mysql 中有一个数据集,其中包含多个命名接口的带宽测试结果,以及执行测试的日期和接口的名称。示例数据集如下所示:
| date | testResult | interface |
---------------------------------------
| 12/25 | 32 | eth0 |
| 12/25 | 21 | eth0 |
| 12/25 | 25 | eth0 |
| 12/26 | 30 | eth0 |
| 12/27 | 33 | eth0 |
| 12/25 | 12 | eth1 |
| 12/25 | 16 | eth1 |
| 12/27 | 3 | vz0 |
| 12/26 | 120 | virt1 |
我需要绘制给定日期每个界面的平均结果,所以我目前的解决方案是
SELECT `date`, AVG(`testResult`) as avg, `interface` FROM `tests` WHERE 1=1
GROUP BY date, interface ORDER BY interface, date
这给了我这样的结果
| date | avg | interface |
---------------------------------------
| 12/25 | 26 | eth0 |
| 12/26 | 30 | eth0 |
| 12/27 | 33 | eth0 |
| 12/25 | 14 | eth1 |
| 12/26 | 120 | virt1 |
| 12/27 | 3 | vz0 |
我的问题是我需要在日期“加入”(我认为)这些数据,并为当天每个接口的平均值提供一列。结果集中接口的名称和数量不是恒定的,不能硬编码。我理想的结果集如下所示:
| date | avg_eth0 | avg_eth1 | avg_virt1 | avg_vz0 |
-------------------------------------------------------------------
| 12/25 | 26 | 14 | NULL | NULL |
| 12/26 | 30 | NULL | 120 | NULL |
| 12/27 | 33 | NULL | NULL | 3 |
有没有办法执行这个连接,基本上为interface 列的每个唯一值创建一个列?
【问题讨论】:
-
跨选项卡在 mysql 中实际上是不可能的,您需要应用程序级代码。见also this answer
-
可以生成查询然后执行吗?有非常公式化的查询可以做到这一点,但您需要先查询哪些值在那里..或者只是在 excel 中使用数据透视表;)
标签: mysql sql join pivot-table self-join