programing

쿼리에서 그룹 함수 오류를 잘못 사용하는 중

megabox 2023. 8. 17. 21:05
반응형

쿼리에서 그룹 함수 오류를 잘못 사용하는 중

class_id와 month id를 기준으로 student_attendance_daily의 데이터를 변환하려고 하는데 오류가 발생합니다. invalid use of group function저는 MariaDB 10.4를 사용하고 있기 때문에 JSON_ARRAGEG를 사용할 수 없지만 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')

이것은 출석_불참 스키마입니다.

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_herance_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;

동일한 쿼리에서 집계 함수를 집계 함수 안에 넣을 수 없습니다.

하위 쿼리를 사용하여 내부 집계를 생성한 다음 외부 쿼리에서 외부 집계를 수행해야 합니다.추가 수준의 내포 JSON이 있는 경우 추가 수준의 하위 쿼리가 필요합니다.

이는 JSON_ARRAGEG() 기능을 업그레이드하여 사용할 수 있는 경우에도 적용됩니다.

언급URL : https://stackoverflow.com/questions/75547394/getting-invalid-use-of-group-function-error-in-query

반응형