MySQL转位
大家好,新年快乐 我有一个Mysql表,如下所示:MySQL转位,mysql,Mysql,大家好,新年快乐 我有一个Mysql表,如下所示: date | endpoint | nb200 | nb500 d1 | toto | 11 | 12 d1 | tata | 13 | 14 d1 | tutu | 15 | 16 d2 | toto | 21 | 22 d2 | tata | 23 | 24 d2 | tutu | 25 | 26 date | toto | tat
date | endpoint | nb200 | nb500
d1 | toto | 11 | 12
d1 | tata | 13 | 14
d1 | tutu | 15 | 16
d2 | toto | 21 | 22
d2 | tata | 23 | 24
d2 | tutu | 25 | 26
date | toto | tata | tutu
d1 | 11 | 13 | 15
d2 | 21 | 23 | 25
对于每个日期,每个端点都是唯一的,因此我有一个唯一的键(date,endpoint)。日期列是真实的日期,但例如,d1和d2应该很好
现在,我想写一个select请求,向我显示nb200结果,如下所示:
date | endpoint | nb200 | nb500
d1 | toto | 11 | 12
d1 | tata | 13 | 14
d1 | tutu | 15 | 16
d2 | toto | 21 | 22
d2 | tata | 23 | 24
d2 | tutu | 25 | 26
date | toto | tata | tutu
d1 | 11 | 13 | 15
d2 | 21 | 23 | 25
现在,我最好的尝试是
SELECT date,
(CASE WHEN endpoint = 'toto' THEN nb200 END) AS 'toto',
(CASE WHEN endpoint = 'tata' THEN nb200 END) AS 'tata',
(CASE WHEN endpoint = 'tutu' THEN nb200 END) AS 'tutu',
FROM table;
但这不太好,因为我得到以下信息:
date | toto| tata| tutu
d1 | 11 | |
d1 | | 13 |
d1 | | | 15
d2 | 21 | |
d2 | | 23 |
d2 | | | 25
有人知道怎么做吗?您需要执行条件聚合:
MAX
用于有选择地获取每个端点的值
您可以使用(假)聚合函数和分组方式
SELECT date,
min(CASE WHEN endpoint = 'toto' THEN nb200 END) AS 'toto',
min(CASE WHEN endpoint = 'tata' THEN nb200 END) AS 'tata',
min(CASE WHEN endpoint = 'tutu' THEN nb200 END) AS 'tutu',
FROM table
group by date;
您可以按日期分组使用nb200上的max
,也可以按date
min进行分组,并且不使用第二个“END”)“括号,可以正常工作。