【问题标题】:getting invalid use of group function error in query在查询中无效使用组函数错误
【发布时间】:2023-02-24 00:27:19
【问题描述】:

我正在尝试根据 class_id 和 month id 转换来自 student_attendance_daily 的数据,但出现错误 invalid use of group function 我不能使用 JSON_ARRAYAGG,因为我使用的是 MariaDB 10.4,但它在 10.5 中可用,我在 AWS RDS 上使用它并且没有选择升级,所以我正在尝试这样。

这是我的查询

INSERT INTO attendance_student (class_id, month_id, attendance_details, created_at, updated_at)
SELECT 
  class_id, 
  DATE_FORMAT(attendance_date, '%Y%m') AS month_id, 
  CONCAT('[', 
    GROUP_CONCAT(
      CONCAT(
        '{"att_date":"', DATE_FORMAT(attendance_date, '%d-%m-%Y'), '",',
        '"att_status":"', attendance_status, '",',
        '"att_punch":',
        IFNULL(
          CONCAT('[', 
            GROUP_CONCAT(
              CONCAT(
                '{"did":"', bio_punch_details, '",',
                '"pat":"', IFNULL(DATE_FORMAT(created_at, '%d-%m-%Y %H:%i:%s'), ''), '",',
                '"ss":"', IFNULL(bio_punch_details, ''), '"}'
              )
              ORDER BY created_at ASC
              SEPARATOR ','
            ), 
          ']'),
          '[]'
        ),
        '}'
      )
      ORDER BY attendance_date ASC
      SEPARATOR ','
    ) 
  , ']') AS attendance_details, 
  NOW() AS created_at, 
  NOW() AS updated_at
FROM student_attendance_daily
GROUP BY class_id, month_id;

我想插入这样的数据

(1, 136, 1, '[{\"att_date\":\"12-01-2023\",\"att_status\":0,\"att_punch\":[{\"did\":\"1\",\"pat\":\"12-01-2023 18:35:33\",\"ss\":\"ss_std_20230112183534_667757.jpg\"}]},{\"att_date\":\"20-01-2023\",\"att_status\":1,\"att_punch\":[{\"did\":\"2\",\"pat\":\"20-01-2023 00:29:48\",\"ss\":\"ss_std_20230120002949_672689.jpg\"}]}]', '2023-01-12 18:35:34', '2023-01-20 00:29:49')

它是 attendance_student 模式

CREATE TABLE `attendance_student` (
  `id` int(11) NOT NULL,
  `class_id` int(11) NOT NULL,
  `month_id` int(11) NOT NULL,
  `attendance_details` mediumtext COLLATE utf8_unicode_ci NOT NULL,
  `created_at` datetime DEFAULT NULL,
  `updated_at` datetime DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

--

它是 student_attendance_daily 表模式

CREATE TABLE `student_attendance_daily` (
  `id` int(11) NOT NULL,
  `class_id` int(11) NOT NULL,
  `attendance_date` date NOT NULL,
  `attendance_status` tinyint(1) NOT NULL,
  `late_status` tinyint(1) DEFAULT NULL,
  `attendance_remarks` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  `bio_punch_details` text COLLATE utf8_unicode_ci,
  `created_at` datetime NOT NULL,
  `created_by` int(11) NOT NULL,
  `updated_at` datetime NOT NULL,
  `updated_by` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

【问题讨论】:

    标签: group-by mariadb innodb group-concat


    【解决方案1】:

    您不能将聚合函数放在同一查询中的聚合函数内。

    您必须使用子查询生成内部聚合,然后在外部查询中执行外部聚合。如果您有更多级别的嵌套 JSON,您将需要更多级别的子查询。

    这也适用于 JSON_ARRAYAGG() 如果您有一天能够升级和使用该功能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-21
      • 1970-01-01
      相关资源
      最近更新 更多