programing

MySQL Sum() 여러 열

coolbiz 2022. 10. 5. 23:05
반응형

MySQL Sum() 여러 열

나는 학생 점수표를 가지고 있다.여기 테이블이 있습니다.

subject  | mark1 | mark2 | mark3 |......|markn
stud1    | 99    | 87    | 92    |      | 46
stud2    |....................................
  .
  .
studn    |....................................|

이제 총점 학생 한 명당 합계를 내야 합니다.를 사용하여 취득했습니다.sum(mark1+mark2+...+markn) group by stud각 컬럼명을 추가하지 않고 합산하는 방법을 알고 싶습니다.marks26까지가 큰 경우이므로 누구나 고칠 수 있습니다.잘 부탁드립니다.

SELECT student, (SUM(mark1)+SUM(mark2)+SUM(mark3)....+SUM(markn)) AS Total
 FROM your_table
 GROUP BY student

또 다른 방법은 선택 쿼리를 생성하는 것입니다. 바이올린을 가지고 놀아라.

SELECT CONCAT('SELECT ', group_concat(`COLUMN_NAME` SEPARATOR '+'), ' FROM scorecard') 
FROM  `INFORMATION_SCHEMA`.`COLUMNS` 
WHERE `TABLE_SCHEMA` = (select database()) 
AND   `TABLE_NAME`   = 'scorecard'
AND   `COLUMN_NAME` LIKE 'mark%';

위의 쿼리는 다른 쿼리를 생성하여 선택을 수행합니다.

  1. 위의 쿼리를 실행합니다.
  2. 결과를 가져와 결과 쿼리를 실행합니다.

샘플 결과:

SELECT mark1+mark2+mark3 FROM scorecard

더 이상 모든 열을 수동으로 추가할 필요가 없습니다.

고객님의 고객님의markn컬럼이 "AllowNull"인 경우 올바른 결과가 반환되도록 하려면 조금 더 많은 작업을 수행해야 합니다. 이는 NULL 값이 1개이면 합계가 NULL이 되기 때문입니다.

이것이 내가 정답이라고 생각하는 것이다.

SUM(IFNULL(`mark1`, 0) + IFNULL(`mark2`, 0) + IFNULL(`mark3`, 0)) AS `total_marks` 

IFNULL은 첫 번째 파라미터가 NULL일 경우 두 번째 파라미터를 반환합니다.COALESCE는 사용할 수 있지만 필요한 경우에만 사용하는 것이 좋습니다.mysql에서 ifnull과 coalesce의 차이점은 무엇입니까? 참조하십시오.

전체 계산을 합산하는 것이 각 열을 개별적으로 합산하는 것보다 더 깔끔합니다.

SELECT `student`, SUM(IFNULL(`mark1`, 0) + IFNULL(`mark2`, 0) + IFNULL(`mark3`, 0)) AS `total_marks` 
FROM student_scorecard
GROUP BY `student`

각 컬럼 이름을 추가하지 않고 합산하는 방법을 알고 싶습니다.marks26까지가 되면 매우 커집니다.

이 문을 SQL에서 동적으로 생성하고 실행하려면 INFORMATION_SCHEMA를 사용해야 합니다.COLUMNS 테이블: 쿼리 문자열을 만든 후 변수에 저장된 준비된 문을 사용하여 실행합니다.

SELECT CONCAT('SELECT `student`, SUM(IFNULL(`', group_concat(`COLUMN_NAME` SEPARATOR '`, 0) + IFNULL(`'), '`, 0) AS `total_marks` FROM `student_scorecard` GROUP BY `student`') 
FROM `INFORMATION_SCHEMA`.`COLUMNS` 
WHERE `TABLE_SCHEMA` = (select DATABASE()) 
AND `TABLE_NAME`   = 'student_scorecard'
AND `COLUMN_NAME` LIKE 'mark%'
# adapted from https://stackoverflow.com/a/22369767/2273611


# insert statement sql into a variable
INTO @statement_var;

#prepare the statement string
PREPARE stmt_name FROM @statement_var;

#execute the prepared statement/query
EXECUTE stmt_name;

# release statement
DEALLOCATE PREPARE stmt_name;

학생 선택, SUM(mark1+mark2+mark3+...)+markn) 표에서 AS 합계

간단히 말하면, 현재 가지고 있는 디자인으로 볼 때 이 작업을 수행할 수 있는 좋은 방법은 없습니다.이 주제에 대한 관련 질문은 다음과 같습니다.단일 행의 합계 값?

스키마를 정규화하고 subject_id와 마크 컬럼을 가진 "Marks"라는 개별 테이블을 작성하면 관계형 모델에서 의도한 대로 SUM 함수를 활용할 수 있습니다.

그럼 당신의 질문은

SELECT subject, SUM(mark) total 
FROM Subjects s 
  INNER JOIN Marks m ON m.subject_id = s.id
GROUP BY s.id

//여러 행의 Mysql 합계 Hi 열 합계를 수행하는 간단한 방법은 다음과 같습니다.

SELECT sum(IF(day_1 = 1,1,0)+IF(day_3 = 1,1,0)++IF(day_4 = 1,1,0)) from attendence WHERE class_period_id='1' and student_id='1'

모든 제목 행이 열 변수(예: 스프레드시트)가 되도록 데이터베이스 구조를 변경할 수 있습니다.이를 통해 이러한 분석이 훨씬 쉬워집니다.

언급URL : https://stackoverflow.com/questions/22369336/mysql-sum-multiple-columns

반응형