繁体   English   中英

MySQL 8-JSON_ARRAYAGG中的排序和过滤

[英]MySQL 8 - sorting and filtering in JSON_ARRAYAGG

最近,我安装了MySQL 8.0.11 GA,并希望优化某些视图,函数等。通常,我有类似以下内容:

CREATE TABLE `PublicHoliday` (
  `PublicHoliday_ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `PublicHoliday_Name` varchar(45) NOT NULL,
  `CompanyGroup_ID` int(2) unsigned NOT NULL,
  `Holiday` date NOT NULL,
  `State_ID` int(2) unsigned NOT NULL,
  PRIMARY KEY (`PublicHoliday_ID`),
  UNIQUE KEY `PublicHoliday_Comb` (`CompanyGroup_ID`,`Holiday`,`PublicHoliday_Name`,`State_ID`),
  CONSTRAINT `CompanyGroup_PublicHoliday` FOREIGN KEY (`CompanyGroup_ID`) REFERENCES `CompanyGroup` (`CompanyGroup_ID`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

使用MySQL 5.7,我不得不做类似的事情

SELECT      CompanyGroup_ID,
            CAST(CONCAT('[',(
                GROUP_CONCAT(
                    DISTINCT JSON_OBJECT(
                        'Holiday', Holiday,
                        'PublicHoliday_Name', PublicHoliday_Name,
                        'PublicHoliday_ID', PublicHoliday_ID
                    )
                    ORDER BY Holiday ASC
                )
            ),']') AS JSON) AS HolidayArr
FROM        CompanyGroup
LEFT JOIN   Holiday
    USING(CompanyGroup_ID)
GROUP BY    CompanyGroup_ID

现在,随着MySQL 8.0.11 GA的发布,我想到了使用JSON_ARRAYAGG()而不是整个cast + concat + group_concat,但是我不知道如何设置顺序或如何忽略重复项。 有谁知道在JSON_ARRAYAGG()中是否有办法实现任何排序或过滤?

顺便说一句:我知道有可能在rust,php中实现,但是我想在SQL中实现这一点,以便能够在过程,函数,事件,触发器,视图等中使用它。

从MySQL 8.0.14开始,JSON_ARRAYAGG()和其他JSON函数可在可指定顺序的窗口函数中使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM