#mysql #sql #aggregate-functions
#mysql #sql #агрегатные функции
Вопрос:
Есть ли способ в mysql8.0 установить ограничение в JSON_ARRAYAGG
or 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
, где он принимает a LIMIT
.
Комментарии:
1. Пожалуйста, добавьте некоторые примеры данных и желаемый результат
2. @AkhileshMishra смотрите Обновленный вопрос.
Ответ №1:
Самый простой метод — это оконные функции:
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
Комментарии:
1. Я думаю, что
json_arrayagg
он поддерживаетOVER
внутри синтаксиса?JSON_ARRAYAGG(col_or_expr) [over_clause]
: dev.mysql.com/doc/refman/8.0/en /…