MySQL:行串联

标签 mysql concatenation

也许这确实是一个简单的问题,提前致谢。

我目前拥有的:

+-----+---+---+---+---+
| sid | a | b | c | d |
+-----+---+---+---+---+
| 123 |   |   |   | 4 |
| 123 |   | 2 |   |   |
| 123 |   |   | 3 |   |
| 123 | 1 |   |   |   |
| 456 |   | 5 |   |   |
| 456 |   |   | 6 |   |
| 789 |   |   |   | 8 |
| 789 | 7 |   |   |   |
+-----+---+---+---+---+

我想要得到什么:

+-----+------+------+------+------+
| sid |  a   |  b   |  c   |  d   |
+-----+------+------+------+------+
| 123 | 1    | 2    | 3    | 4    |
| 456 |      | 5    | 6    |      |
| 789 | 7    |      |      | 8    |
+-----+------+------+------+------+

如何在 MySQL 中完成这样的“行串联”?

最佳答案

您可以通过查询中的 GROUP BY 子句使用 MAX() 聚合函数来执行此操作。

SELECT sid, MAX(a), MAX(b), MAX(c), MAX(d)
FROM table
GROUP BY sid

我使用了MAX(),因为它会用其他值过滤 NULL 值。

更多解释在这里:MySQL Documentation

关于MySQL:行串联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55087676/

相关文章:

mysql - 查询的设计

sql - 如何将数据从 Postgres 移动到在 Amazon 的 RDS 上运行的 MySQL?

MySQL比较两个表并添加缺失值

javascript - 使用纯 javascript(无 JQuery/3rd 方库),如何连接来自 document.getElementsByTagName 的集合以在单循环中迭代

for循环中的C预处理器串联

php - MySQLi/PHP : Not redirecting to error page?

php - Mysql 服务器不再与服务器名连接

Python:合并数据框并将所有值保留在单元格中(如果不相同)

string - 在 Perl 中,为什么将散列与字符串连接在一起会给出看起来像分数的结果?

c++ - 在 C++ 中连接单个字符并转换为组合小数