Сред многото MySQL агрегатни функции е една, наречена JSON_ARRAYAGG()
. Тази функция ви позволява да агрегирате набор от резултати като единичен JSON масив. Всеки ред от резултатния набор завършва като единичен елемент в масива.
Редът на елементите в масива е недефиниран.
Синтаксис
Синтаксисът е така:
JSON_ARRAYAGG(col_or_expr)
Където col_or_expr
е колона или израз, който се оценява до една стойност.
Пример
Ето пример за демонстрация.
Ето една обща заявка, която може да изпълним без JSON_ARRAYAGG()
функция:
SELECT District AS 'State', Name AS 'City' FROM City WHERE CountryCode = 'AUS' ORDER BY State;
Резултат:
+-----------------+---------------+ | State | City | +-----------------+---------------+ | Capital Region | Canberra | | New South Wales | Sydney | | New South Wales | Newcastle | | New South Wales | Central Coast | | New South Wales | Wollongong | | Queensland | Brisbane | | Queensland | Gold Coast | | Queensland | Townsville | | Queensland | Cairns | | South Australia | Adelaide | | Tasmania | Hobart | | Victoria | Melbourne | | Victoria | Geelong | | West Australia | Perth | +-----------------+---------------+
Можем да коригираме тази заявка, така че всеки град да стане елемент в масив. За да направите това, ние просто предаваме Name
колона (името на града) към JSON_ARRAYAGG()
функция.
Ние също така използваме GROUP BY
клауза за групиране на резултатите по District
колона (в този случай сме създали псевдоним за тази колона, наречен State
).
SELECT District AS 'State', JSON_ARRAYAGG(Name) AS 'Cities' FROM City WHERE CountryCode = 'AUS' GROUP BY State;
Резултат:
+-----------------+--------------------------------------------------------+ | State | Cities | +-----------------+--------------------------------------------------------+ | Capital Region | ["Canberra"] | | New South Wales | ["Sydney", "Newcastle", "Central Coast", "Wollongong"] | | Queensland | ["Brisbane", "Gold Coast", "Townsville", "Cairns"] | | South Australia | ["Adelaide"] | | Tasmania | ["Hobart"] | | Victoria | ["Melbourne", "Geelong"] | | West Australia | ["Perth"] | +-----------------+--------------------------------------------------------+
Вижте също JSON_OBJECTAGG()
функция, която ви позволява да създадете JSON обект от заявка.