我在mysql中有一個數據集,其中包含多個命名接口的帶寬測試結果,包括執行測試的日期和接口的名稱。樣本數據集都將是這個樣子:在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中,您需要應用程序級代碼。請參閱[也是這個答案](http://stackoverflow.com/questions/8977855/mysql-dynamic-cross-tab) – Wrikken
你可以生成查詢,然後執行它?有非常公式化的查詢可以做到這一點,但您需要先查詢哪些值在那裏,或者只需在Excel中使用數據透視表;) – gordatron