mysql JSON_ARRAYAGG 或 GROUP_CONCAT 有限制

mysql JSON_ARRAYAGG or GROUP_CONCAT with limit

在 mysql8.0 中有没有办法在 JSON_ARRAYAGGGROUP_CONCAT 范围内进行限制?例如:

WITH season AS (
    select 'DAL'  as team, 4 as wins, 2000 as season UNION
    select 'DAL'  as team, 10 as wins, 2001 as season UNION
    select 'DAL'  as team, 9 as wins, 2002 as season UNION
    select 'GB'  as team, 2 as wins, 2000 as season UNION
    select 'GB'  as team, 3 as wins, 2001 as season UNION
    select 'GB'  as team, 4 as wins, 2002 as season
) SELECT
    team,
    GROUP_CONCAT(wins order by season desc separator '+') wins_str,
    JSON_ARRAYAGG(wins) wins_arr
FROM season
GROUP BY team;

例如,我如何只得到上面两个字段的前5个wins?例如,我想做一些你可以在 BigQuery STRING_AGG 中做的事情,它接受 LIMIT.

最简单的方法是window函数:

SELECT
    team,
    GROUP_CONCAT(wins ORDER BY season DESC SEPARATOR '+') wins,
    JSON_ARRAYAGG(wins)
FROM (
    SELECT s.*,
    ROW_NUMBER() OVER (
        PARTITION BY team ORDER BY seasons DESC
    ) AS seqnum
    FROM seasons s
) s
WHERE seqnum <= 5
GROUP BY team