我有一个像这样的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
对于每个日期,每个端点都是唯一的,因此我有一个唯一的密钥(日期,端点)。日期列是实际日期,但是例如,d1和d2应该很棒。
现在,我想写一个选择请求,向我展示nb200结果:
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
有人知道如何做到这一点吗?
答案 0 :(得分:2)
您需要执行条件聚合:
SELECT `date`,
MAX(CASE WHEN endpoint = 'toto' THEN nb200 END) AS 'toto',
MAX(CASE WHEN endpoint = 'tata' THEN nb200 END) AS 'tata',
MAX(CASE WHEN endpoint = 'tutu' THEN nb200 END) AS 'tutu'
FROM mytable
GROUP BY `date`
MAX
用于有选择地获取endpoint
值中的每一个。
答案 1 :(得分:1)
您可以使用(假)聚合功能和分组
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;