gpt4 book ai didi

mysql - 来自组的路径

转载 作者:可可西里 更新时间:2023-11-01 08:38:55 32 4
gpt4 key购买 nike

我有以下数据:

╔════╦═══════╦═══════╗║ id ║ group ║ place ║╠════╬═══════╬═══════╣║  1 ║     1 ║ a     ║║  2 ║     1 ║ b     ║║  3 ║     1 ║ b     ║║  4 ║     1 ║ a     ║║  5 ║     1 ║ c     ║║  6 ║     2 ║ a     ║║  7 ║     2 ║ b     ║║  8 ║     2 ║ c     ║╚════╩═══════╩═══════╝

如何获取MySQL中各组的路径?

预期的结果是:

╔═══════╦════════════╗║ group ║    path    ║╠═══════╬════════════╣║     1 ║ a-b-a-c    ║║     2 ║ a-b-c      ║╚═══════╩════════════╝

最佳答案

假设最终目标是按groupid排序,然后简化每个group的序列,使得连续重复的地方只显示一次:

首先确定每一行的地点或组自上一行以来是否发生了变化。 this answer 中有解决此问题的好方法.

然后使用GROUP_CONCAT将这些地方合并成一个路径。

请注意,GROUP_CONCAT 具有用户可配置的最大长度,默认情况下为 1,024 个字符。

SELECT 
`group`,
GROUP_CONCAT(place ORDER BY id SEPARATOR '-') path
FROM
(SELECT
COALESCE(@place != place OR @group != `group`, 1) changed,
id,
@group:=`group` `group`,
@place:=place place
FROM
place_table, (SELECT @place:=NULL, @group:=NULL) s
ORDER BY `group`, id) t
WHERE
changed = 1
GROUP BY `group`;

关于mysql - 来自组的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50151626/

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