IT박스

MySQL Sum () 여러 열

itboxs 2021. 1. 11. 07:52
반응형

MySQL Sum () 여러 열


학생 스코어 카드 테이블이 있습니다. 여기 테이블이 있습니다.

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

이제 각 학생의 총점을 합산해야합니다. 나는 사용하여 그것을 얻었다 sum(mark1+mark2+...+markn) group by stud. 각 열 이름을 추가하지 않고 합산하는 방법을 알고 싶습니다. 마크 26까지의 경우 엄청날 것입니다. 그래서 누구든지 그것을 고치는 방법을 알 수 있습니다. 미리 감사드립니다.


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

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


학생 선택, SUM (mark1 + mark2 + mark3 + .... + markn) 총계를 your_table에서


짧은 대답은 당신이 가지고있는 디자인을 감안할 때 이것을 할 수있는 좋은 방법이 없다는 것입니다. 다음은 주제에 대한 관련 질문 입니다. 단일 행의 합계 값?

스키마를 정규화하고 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'

귀하의 경우 markn열은 "AllowNull는"당신은 1 개 NULL 값이 NULL 총 발생합니다 때문입니다, 반환되는 정확한 결과를 보장하기 위해 약간의 추가 작업을 수행해야합니다.

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

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

IFNULL 은 첫 번째가 NULL이면 두 번째 매개 변수를 반환합니다. COALESCE를 사용할 수 있지만 필요한 경우에만 사용하는 것을 선호합니다. mysql에서 ifnull과 통합의 차이점무엇입니까?를 참조하십시오 .

SUM 전체 계산 -ing 개별적으로 각 컬럼은 SUM 한창보다 정돈된다.

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

모든 주제 행이 스프레드 시트와 같은 열 변수가되도록 데이터베이스 구조를 변경할 수 있습니다. 이것은 그러한 분석을 훨씬 쉽게 만듭니다.

참조 URL : https://stackoverflow.com/questions/22369336/mysql-sum-multiple-columns

반응형