MySQL多行数据合并为单行的查询语句实现问询
如何在MySQL中将多行查询结果合并为单行(按baseWord聚合)
嘿,这个需求很常见,用MySQL的条件聚合就能轻松搞定!你想要把同一个baseWord对应的不同case值拆分到单独的列里,把多行数据合并成单行展示,下面是具体的实现方法:
核心思路
利用聚合函数(比如MAX())配合CASE WHEN条件判断,针对不同的case类型提取对应的word值,再通过GROUP BY按baseWord分组,最终将多行合并为单行。
针对单个baseWord的查询(以'run'为例)
如果你只需要查询baseWord = 'run'的结果,执行以下SQL语句:
SELECT baseWord, MAX(CASE WHEN `case` = 'past' THEN word END) AS word, 'past' AS `case`, MAX(CASE WHEN `case` = 'plural' THEN word END) AS plural FROM myTable WHERE baseWord = 'run' GROUP BY baseWord;
语句解释
CASE WHEN \case` = 'past' THEN word END:筛选出case为past的word值,其他情况返回NULL;用MAX()聚合是因为每个baseWord对应唯一的past值,聚合后会自动忽略NULL,得到我们需要的ran`。- 同理,
plural列通过相同逻辑提取case为plural的word值runners。 GROUP BY baseWord:确保将同一个baseWord的所有行合并为一行。
执行后会得到你期望的结果:
| baseWord | word | case | plural |
|---|---|---|---|
| run | ran | past | runners |
批量处理所有baseWord的通用查询
如果你想一次性处理表中所有baseWord,去掉WHERE条件即可,同时可以优化列名让结果更清晰:
SELECT baseWord, MAX(CASE WHEN `case` = 'past' THEN word END) AS past_word, MAX(CASE WHEN `case` = 'plural' THEN word END) AS plural_word FROM myTable GROUP BY baseWord;
这个语句会返回所有单词的过去式和复数形式的单行结果:
| baseWord | past_word | plural_word |
|---|---|---|
| run | ran | runners |
| talk | talked | talkers |
内容的提问来源于stack exchange,提问作者Mattytripps
相关产品推荐
相关产品推荐

