mysql JSON_ARRAYAGG 或 GROUP_CONCAT 有限制
mysql JSON_ARRAYAGG or GROUP_CONCAT with limit
在 mysql8.0 中有没有办法在 JSON_ARRAYAGG
或 GROUP_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
在 mysql8.0 中有没有办法在 JSON_ARRAYAGG
或 GROUP_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