gpt4 book ai didi

MySQL Select - 数字时合并行

转载 作者:行者123 更新时间:2023-11-28 23:11:28 25 4
gpt4 key购买 nike

我想在一行中显示结果,并按特定值的列分隔。

mysql> +----------------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+------+---------------------+
-> | temp_series_id | CO | DP | BO | DZ | KT | KR | DR | GZ | GP | PD | CD | date |
-> +----------------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+------+---------------------+
-> | 272138 | 21.12 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | 2017-08-20 14:06:46 |
-> | 272138 | NULL | 20.06 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | 2017-08-20 14:06:46 |
-> | 272138 | NULL | NULL | 18.69 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | 2017-08-20 14:06:46 |
-> | 272138 | NULL | NULL | NULL | 21.81 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | 2017-08-20 14:06:46 |
-> | 272138 | NULL | NULL | NULL | NULL | 22.06 | NULL | NULL | NULL | NULL | NULL | NULL | 2017-08-20 14:06:46 |
-> | 272138 | NULL | NULL | NULL | NULL | NULL | 22.44 | NULL | NULL | NULL | NULL | NULL | 2017-08-20 14:06:46 |
-> | 272138 | NULL | NULL | NULL | NULL | NULL | NULL | 14.69 | NULL | NULL | NULL | NULL | 2017-08-20 14:06:46 |
-> | 272138 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | 24.69 | NULL | NULL | NULL | 2017-08-20 14:06:46 |
-> | 272138 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | 22.75 | NULL | NULL | 2017-08-20 14:06:46 |
-> | 272138 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | 19.94 | NULL | 2017-08-20 14:06:46 |
-> | 272138 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | 24.5 | 2017-08-20 14:06:46 |
-> +----------------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+------+---------------------+

如何将这些行合并为一行?类似于 group by temp_series_id 并删除空值

SELECT
SQL_NO_CACHE
temp_series_id,
CASE WHEN temp_details_id = 1 THEN value END AS 'CO',
...
CASE WHEN temp_details_id = 11 THEN value END AS 'CD',
date
FROM (SELECT *
FROM temp_series
ORDER BY date DESC
LIMIT 1)
series INNER JOIN temp_object objects ON series.id = objects.temp_series_id
INNER JOIN temp_details details ON details.id = objects.temp_details_id;

下面你可以看到我想做的结果

+----------------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+------+---------------------+
| temp_series_id | CO | DP | BO | DZ | KT | KR | DR | GZ | GP | PD | CD | date |
+----------------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+------+---------------------+
| 272138 | 21.12 | 20.06 | 18.69 | 21.81 | 22.06 | 22.44 | 14.69 | 24.69 | 22.75 | 19.94 | 24.5 | 2017-08-20 14:06:46 |
+----------------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+------+---------------------+

最佳答案

使用聚合:

SELECT SQL_NO_CACHE
temp_series_id,
MAX(CASE WHEN temp_details_id = 1 THEN value END) AS CO,
...
MAX(CASE WHEN temp_details_id = 11 THEN value END) AS CD,
date
FROM (SELECT *
FROM temp_series
ORDER BY date DESC
LIMIT 1
) series INNER JOIN
temp_object objects
ON series.id = objects.temp_series_id INNER JOIN
temp_details details
ON details.id = objects.temp_details_id
GROUP BY temp_series_id, date;

关于MySQL Select - 数字时合并行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45782104/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com