如何与JSON_ARRAYAGG一起使用DISTINCT?
让我们以下面的查询为例。
SELECT
staff.company,
JSON_ARRAYAGG(
JSON_OBJECT(
'uuid', UuidFromBin(staff.uuid),
'username', staff.username,
'name', staff.name,
'surname', staff.surname
)
)
FROM events_staff
JOIN staff ON staff.id = staff_id
LEFT JOIN skills s ON s.id = events_staff.skill_id
GROUP BY staff.company现在,我如何在这个查询中使用不同的JSON_ARRAYAGG,以便JSON对象是不同的?如果我们可以基于任何键(如uuid )应用不同的内容,情况会更好。
搜索半个小时后,我找到了以下选项,但无法在上面的查询中应用这些选项。
- JSON_ARRAYAGG返回一个JSON数组,该数组由所选行中字符串-expr的所有不同(唯一)值组成:JSON_ARRAYAGG(DISTINCT col1)。空字符串-expr不包含在JSON数组中。JSON_ARRAYAGG(由( col2 ) col1区分)返回一个JSON数组,该数组仅包含记录中的col1字段值,其中col2值是不同的(唯一的)。但是请注意,不同的col2值可能包含一个NULL作为一个不同的值.
。
发布于 2022-07-24 12:16:23
我已经找到了解决这个问题的解决办法,首先解决的是使用JSON_ARRAYAGG(DISTINCT JSON_OBJECT())根本行不通的问题。
因此,解决办法是CONCAT('[', GROUP_CONCAT(DISTINCT JSON_OBJECT("key": value)), ']');,这将产生类似于这个[ {"key": <value1>},{"key":<value2>}, ...]的东西。这将返回不同的结果。
注意:您可能需要将其转换为JSON,最后可以这样做:=> CAST(CONCAT('[', GROUP_CONCAT(JSON_OBJECT("key": value)), ']') AS JSON);
https://stackoverflow.com/questions/70993552
复制相似问题