MySQL 5.7 имеет функции для JSON_OBJECT () и JSON_ARRAYAGG () , которые могут помочь в этом случае.
SELECT JSON_OBJECT(
'videos', JSON_ARRAYAGG(videos.title),
'count', COUNT(*)
) AS result
FROM videos
WHERE owner = 1
Если вы хотите Массив videos должен содержать объекты, а не только строки, а затем вкладывать вызов JSON_OBJECT внутрь.
SELECT JSON_OBJECT(
'videos', JSON_ARRAYAGG(
JSON_OBJECT(
'title', videos.title,
'owner', videos.owner,
'rating', videos.rating,
...other key-value pairs...
)
),
'count', COUNT(*)
) AS result
FROM videos
WHERE owner = 1
Если вы хотите ограничить количество строк, включенных в агрегацию, вам придется сделать это в подзапросе производной таблицы, потому что функции агрегирования не имеют никакого способа выполнить LIMIT.
SELECT JSON_OBJECT(...same as above...) AS result
FROM (
SELECT title, owner, rating
FROM videos
WHERE owner = 1
LIMIT 20 OFFSET 0
) AS t