반응형
Insert 트리거를 설정하여 최대값을 다른 열에 저장합니다.
내 테이블은 다음과 같습니다.
학생_id | subject_id | 총 | 맥스. |
---|---|---|---|
101 | 1 | 6 | |
102 | 2 | 5 | |
103 | 1 | 9 | |
101 | 1 | 10 | |
103 | 2 | 2 | |
104 | 1 | 7 |
합계가 삽입되면 "max" 열이 자동으로 채워지길 원합니다.
예상 출력:
학생_id | subject_id | 총 | 맥스. |
---|---|---|---|
101 | 1 | 10 | 10 |
102 | 2 | 5 | 7 |
103 | 1 | 9 | 10 |
101 | 1 | 8 | 10 |
103 | 2 | 2 | 7 |
104 | 1 | 7 | 10 |
이를 위한 계기를 만들고 싶습니다.
이것은 잘 작동하는 나의 SELECT 문인데 어떻게 트리거에 넣을 수 있습니까?
WITH CTE AS (SELECT `subject_id`,MAX(`total`) AS MaxTotal
FROM results
GROUP BY `subject_id`
)
SELECT results.*,CTE.MaxTotal
FROM results
JOIN CTE ON results.`subject_id` = CTE.`subject_id`;
이렇게 했는데 오류가 너무 많이 났어요.
CREATE TRIGGER `max_score_before_INSERT` BEFORE INSERT ON `results`
FOR EACH ROW
SET NEW.max = (WITH CTE AS (SELECT `subject_id`,MAX(`NEW.total`) AS MaxTotal
FROM results
GROUP BY `subject_id`
)
SELECT results.*,CTE.MaxTotal
FROM results
JOIN CTE ON results.`subject_id` = CTE.`subject_id`
);
A 내부에 있는 "새로운"을 참조할 수 없습니다.BEFORE
트리거 유형입니다.행을 먼저 삽입한 다음 열을 다음과 같이 업데이트할 수 있습니다.AFTER
트리거 유형:
CREATE TRIGGER `max_score_before_INSERT` AFTER INSERT ON `results`
FOR EACH ROW
UPDATE <your_table_name>
INNER JOIN (SELECT subject_id,
MAX(total) AS total_max
FROM <your_table_name>
GROUP BY subject_id) cte
ON <your_table_name>.subject_id = cte.subject_id
SET <your_table_name>.max = cte.total_max;
이 접근 방식은 이전 열도 업데이트합니다. 마치 최대가 되는 새 필드를 삽입하는 것처럼, 이미 존재하는 행도 업데이트할 수 있습니다.그렇지 않다면, 당신은 그 안에서 조건을 사용할 수 있습니다.UPDATE
문:
CREATE TRIGGER `max_score_before_INSERT` AFTER INSERT ON `results`
FOR EACH ROW
UPDATE <your_table_name>
INNER JOIN (SELECT subject_id,
MAX(total) AS total_max
FROM <your_table_name>
GROUP BY subject_id) cte
ON <your_table_name>.subject_id = cte.subject_id
SET <your_table_name>.max = cte.total_max;
WHERE <your_table_name>.student_id = NEW.student_id
AND <your_table_name>.subject_id = NEW.subject_id;
언급URL : https://stackoverflow.com/questions/72688317/set-insert-trigger-to-store-max-value-in-another-column
반응형
'programing' 카테고리의 다른 글
mysql 등가 데이터 유형 (0) | 2023.10.24 |
---|---|
매크로가 정의되어 있고 동시에 특정 값과 동일한지 확인할 수 있는 방법이 있습니까? (0) | 2023.10.19 |
표준 시간대를 사용하여 오라클 DATE 열을 타임스탬프 (0) | 2023.10.19 |
sql 덤프 파일에서 mariadb를 업그레이드하는 방법은? (0) | 2023.10.19 |
정규 표현식에서 'g' 깃발의 의미는 무엇입니까? (0) | 2023.10.19 |