Select group_concat(ID SEPARATOR '|')
from TableJ J
Left Join TableL L on L.J_ID=J.ID
Left Join TableB B on B.LJ_ID=L.F_ID
Left Join TableLJ LJ on LJ.ID=L.F_ID
Group
by J.ID
输出返回类似
的记录等
问题是我需要将结果中的记录数/管道数限制为5条记录。
在TableLJ中,有一个字段Population
,我可以使用该字段进行排序和限制,但没有多少麻烦可以让我指定要从该表PER组中选择前5名。
更新是,我可以执行以下操作来限制group_concat(仍然无法解决让它们由LJ.Population首先进行排序)
substring_index(group_concat(ID SEPARATOR '|'),'|',5)
答案 0 :(得分:0)
Group_Concat()
函数具有一个可选的true
子句,我们可以使用该子句基于另一个/相同的列对要连接的列值进行排序。Substring_Index()
函数将串联字符串限制为每组5个。尝试:
Order By
在MySQL 8.0.2 and onwards中,我们可以在SELECT Substring_Index(Group_concat(ID
ORDER BY LJ.Population ASC
SEPARATOR '|'),
'|',
5)
FROM TableJ AS J
LEFT JOIN TableL AS L
ON L.J_ID = J.ID
LEFT JOIN TableB AS B
ON B.LJ_ID = L.F_ID
LEFT JOIN TableLJ AS LJ
ON LJ.ID = L.F_ID
GROUP BY J.ID
的分区中利用Window Functions来确定Row_Number()
。我们可以按J.ID
进行排序,以得到相应的行号。
现在,将此结果集用作Derived Table,并仅考虑行号5之前的行。然后可以相应地执行LJ.Population
和Group By
。
Group_Concat()