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%';
위의 쿼리는 다른 쿼리를 생성하여 선택을 수행합니다.
- 위의 쿼리를 실행합니다.
- 결과를 가져와 결과 쿼리를 실행합니다.
샘플 결과:
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
'programing' 카테고리의 다른 글
마리아 삭제 방법다중 소스 복제를 위해 DB가 지정한 Connection_name (0) | 2022.10.05 |
---|---|
MySQL을 사용하여 뉴스 테이블에서 지난 6개월을 선택하는 방법 (0) | 2022.10.05 |
javascript Import에서 @ 기호는 어떤 역할을 합니까? (0) | 2022.10.05 |
MariaDB에서 Postgre로 데이터 추가트리거별 SQL (0) | 2022.10.05 |
Java의 create New File() - 디렉토리도 작성합니까? (0) | 2022.10.05 |