【发布时间】:2022-07-24 20:16:23
【问题描述】:
如何将 DISTINCT 与 JSON_ARRAYAGG 一起使用?
让我们以下面的查询为例。
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
现在,如何在此查询中将 DISTINCT 与 JSON_ARRAYAGG 一起使用,以使 JSON 对象不同?如果我们可以根据 uuid 之类的任何键应用 DISTINCT,那就更好了。
谷歌搜索半小时后,我找到了以下选项,但无法在上述查询中应用这些选项。
JSON_ARRAYAGG DISTINCT 返回一个 JSON 数组,该数组由所有 所选行中 string-expr 的不同(唯一)值: JSON_ARRAYAGG(DISTINCT col1)。 NULL string-expr 不包含在 JSON 数组。 JSON_ARRAYAGG(DISTINCT BY(col2) col1) 返回一个 JSON 仅包含记录中的那些 col1 字段值的数组,其中 col2 值是不同的(唯一的)。但是请注意,不同的 col2 values 可能包含一个 NULL 作为不同的值。
【问题讨论】:
-
请发布样本数据。顺便问一下,与
skills表进行左连接的目的是什么?我没有看到它在查询中的任何地方使用。 -
我已删除其他选择,以便该问题专门用于实际查询。
-
这可以理解,但您仍然没有发布数据样本。无论如何,我认为
JSON_ARRAYAGG(DISTINCT col1)IF 没有任何问题,col1实际上是一个存储有效 JSON 值的列。你的col1基本上是从几个不同的列生成的 JSON 值,我猜因为你是按company分组的,所以你的结果返回了重复的staff。我建议您在执行JSON_TABLE()之前在列上应用DISTINCT,然后只有您执行JSON_ARRAYAGG()- 甚至可能不包括DISTINCT。
标签: mysql distinct mysql-5.7 json-arrayagg