mysql 8-json_arrayagg中的排序和过滤

csga3l58  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(1454)

最近我安装了mysql 8.0.11ga,想优化一些视图,函数,。。。通常我会这样:

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;

在MySQL5.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.11ga,我考虑使用json_arrayagg()而不是整个cast+concat+group_concat,但我不知道如何设置顺序或如何忽略重复项。有人知道在json_arrayagg()中是否有实现排序或过滤的方法吗?
顺便说一句:我知道这是有可能实现的生 rust ,php。。。但我想在sql中实现这一点,以便能够在过程、函数、事件、触发器、视图等中使用它,。。。

uqzxnwby

uqzxnwby1#

由于mysql 8.0.14,json_arrayagg()和其他json函数可以在窗口函数中使用,其中可以指定顺序。

相关问题