MySQL中 行转列 以及GROUP_CONCAT函数的用法

背景:你有两个表,一个是yjs_jingqing表,另一个是yjs_parties表。yjs_jingqing表中包含一些警情信息,而yjs_parties表中包含与每个警情相关的多个当事人信息。

目的:你希望从yjs_jingqing表中获取每个警情的jq_id,以及与每个警情相关的所有当事人的pts_nameplate_no,并将它们连接成一个字符串作为结果返回。

在这个SQL查询语句中,通过使用子查询和GROUP_CONCAT()函数,实现了这个目的。以下是对查询语句的解释:

SELECT a.jq_id,
    (SELECT GROUP_CONCAT(pts_name) AS pts_name FROM yjs_parties b WHERE b.jq_id = a.jq_id) AS pts_name,
    (SELECT GROUP_CONCAT(plate_no) AS plate_no FROM yjs_parties b WHERE b.jq_id = a.jq_id) AS plate_no
FROM `yjs_jingqing` a

解释:

  1. 外部查询从yjs_jingqing表中选取jq_id字段作为结果的一部分。
  2. 第一个子查询(SELECT GROUP_CONCAT(pts_name) AS pts_name FROM yjs_parties b WHERE b.jq_id = a.jq_id)用于获取与每个警情相关的所有pts_name的值,并将它们使用GROUP_CONCAT()函数连接成一个字符串,作为别名pts_name的结果。
  3. 第二个子查询(SELECT GROUP_CONCAT(plate_no) AS plate_no FROM yjs_parties b WHERE b.jq_id = a.jq_id)用于获取与每个警情相关的所有plate_no的值,并将它们使用GROUP_CONCAT()函数连接成一个字符串,作为别名plate_no的结果。

最终的结果将包含每个警情的jq_id、与每个警情相关的所有pts_nameplate_no的值。

当使用GROUP_CONCAT函数时,我们可以将多个行中的某个字段的值连接成一个字符串。这个函数在处理聚合查询时非常有用。

GROUP_CONCAT函数的语法如下:

GROUP_CONCAT([DISTINCT] expr [, expr ...]
             [ORDER BY {unsigned_integer | col_name | expr}
                 [ASC | DESC] [, col_name ...]]
             [SEPARATOR str_val])

GROUP_CONCAT函数接受一个或多个表达式作为参数,并将这些表达式的值连接成一个字符串。可以使用DISTINCT关键字来消除重复的值。可以使用ORDER BY子句对结果进行排序。还可以通过指定SEPARATOR参数来设置连接字符串的分隔符。

在我们的查询语句中,我们使用GROUP_CONCAT函数来连接与每个警情相关的所有当事人的pts_nameplate_no

例如,如果有一个警情具有多个当事人,GROUP_CONCAT函数将把它们的pts_nameplate_no连接成一个字符串,使用逗号作为分隔符。

让我们看一个示例,假设有以下数据:

yjs_jingqing表:
jq_id
1
2

yjs_parties表:
jq_id  pts_name    plate_no
1      John Doe    ABC123
1      Jane Smith  DEF456
2      Tom Brown   GHI789
2      Alice Green JKL012

使用我们的查询语句,将会得到以下结果:

jq_id   pts_name                  plate_no
1       John Doe,Jane Smith       ABC123,DEF456
2       Tom Brown,Alice Green     GHI789,JKL012

这样,我们可以在一条查询语句中获取每个警情的jq_id,以及与每个警情相关的所有当事人的pts_nameplate_no,并将它们连接成一个字符串返回。

猜你喜欢

转载自blog.csdn.net/weixin_65837469/article/details/131549894