[SQL] 여러 열 평균
SQL여러 열 평균
나는 테이블이라고 요청 및 데이터 모습 등이 있습니다 :
Req_ID R1 R2 R3 R4 R5
R12673 2 5 3 7 10
R34721 3 5 2 1 8
R27835 1 3 8 5 6
지금은 R1, R2, R3, R4 및 R5의 평균을 표시 할
그래서 쿼리를 같이 썼다 :
Select Req_ID, Avg(R1+R2+R3+R4+R5) as Average
from Request
Group by Req_ID
하지만 난 그냥 R1, R2, R3, R4 및 R5하지 평균의 합을 얻을? 어디에서 잘못을하고있는 중이 야.
해결법
-
==============================
1.데이터를 INT로 저장되어있는 경우, 당신은 시도 할 수 있습니다
데이터를 INT로 저장되어있는 경우, 당신은 시도 할 수 있습니다
Average = (R1 + R2 + R3 + R4 + R5) / 5.0
-
==============================
2.열이 널이 있다면 당신은 언급하지 않습니다. 그들은이고, 당신은 AVG 집계는 당신이 할 수 제공 (2008)와 동일한 의미를 원한다면
열이 널이 있다면 당신은 언급하지 않습니다. 그들은이고, 당신은 AVG 집계는 당신이 할 수 제공 (2008)와 동일한 의미를 원한다면
SELECT *, (SELECT AVG(c) FROM (VALUES(R1), (R2), (R3), (R4), (R5)) T (c)) AS [Average] FROM Request
2005 버전은 좀 더 지루
SELECT *, (SELECT AVG(c) FROM (SELECT R1 UNION ALL SELECT R2 UNION ALL SELECT R3 UNION ALL SELECT R4 UNION ALL SELECT R5) T (c)) AS [Average] FROM Request
-
==============================
3.당신은 간단하게 할 수있는 :
당신은 간단하게 할 수있는 :
Select Req_ID, (avg(R1)+avg(R2)+avg(R3)+avg(R4)+avg(R5))/5 as Average from Request Group by Req_ID
권리?
난 당신이 같은 Req_ID 여러 행이있을 수 있음을 가정하고 있는데이 경우에 동일한 Req_ID에 해당 행에 대한 모든 열과 행에 걸쳐 평균을 계산하려면
-
==============================
4.PostgreSQL의에서, 단지 평균이라는 일곱 개 함수의 집합을 정의하는 하나의 행의 열 (8 2) 복수의 평균을 얻기 위해 (). null 이외의 컬럼의 평균을 생성합니다.
PostgreSQL의에서, 단지 평균이라는 일곱 개 함수의 집합을 정의하는 하나의 행의 열 (8 2) 복수의 평균을 얻기 위해 (). null 이외의 컬럼의 평균을 생성합니다.
그리고 단지
select *,(r1+r2+r3+r4+r5)/5.0,average(r1,r2,r3,r4,r5) from request; req_id | r1 | r2 | r3 | r4 | r5 | ?column? | average --------+----+----+----+----+----+--------------------+-------------------- R12673 | 2 | 5 | 3 | 7 | 10 | 5.4000000000000000 | 5.4000000000000000 R34721 | 3 | 5 | 2 | 1 | 8 | 3.8000000000000000 | 3.8000000000000000 R27835 | 1 | 3 | 8 | 5 | 6 | 4.6000000000000000 | 4.6000000000000000 (3 rows) update request set r4=NULL where req_id='R34721'; UPDATE 1 select *,(r1+r2+r3+r4+r5)/5.0,average(r1,r2,r3,r4,r5) from request; req_id | r1 | r2 | r3 | r4 | r5 | ?column? | average --------+----+----+----+----+----+--------------------+-------------------- R12673 | 2 | 5 | 3 | 7 | 10 | 5.4000000000000000 | 5.4000000000000000 R34721 | 3 | 5 | 2 | | 8 | | 4.5000000000000000 R27835 | 1 | 3 | 8 | 5 | 6 | 4.6000000000000000 | 4.6000000000000000 (3 rows) select *,(r3+r4+r5)/3.0,average(r3,r4,r5) from request; req_id | r1 | r2 | r3 | r4 | r5 | ?column? | average --------+----+----+----+----+----+--------------------+-------------------- R12673 | 2 | 5 | 3 | 7 | 10 | 6.6666666666666667 | 6.6666666666666667 R34721 | 3 | 5 | 2 | | 8 | | 5.0000000000000000 R27835 | 1 | 3 | 8 | 5 | 6 | 6.3333333333333333 | 6.3333333333333333 (3 rows)
이 같이 :
CREATE OR REPLACE FUNCTION AVERAGE ( V1 NUMERIC, V2 NUMERIC) RETURNS NUMERIC AS $FUNCTION$ DECLARE COUNT NUMERIC; TOTAL NUMERIC; BEGIN COUNT=0; TOTAL=0; IF V1 IS NOT NULL THEN COUNT=COUNT+1; TOTAL=TOTAL+V1; END IF; IF V2 IS NOT NULL THEN COUNT=COUNT+1; TOTAL=TOTAL+V2; END IF; RETURN TOTAL/COUNT; EXCEPTION WHEN DIVISION_BY_ZERO THEN RETURN NULL; END $FUNCTION$ LANGUAGE PLPGSQL; CREATE OR REPLACE FUNCTION AVERAGE ( V1 NUMERIC, V2 NUMERIC, V3 NUMERIC) RETURNS NUMERIC AS $FUNCTION$ DECLARE COUNT NUMERIC; TOTAL NUMERIC; BEGIN COUNT=0; TOTAL=0; IF V1 IS NOT NULL THEN COUNT=COUNT+1; TOTAL=TOTAL+V1; END IF; IF V2 IS NOT NULL THEN COUNT=COUNT+1; TOTAL=TOTAL+V2; END IF; IF V3 IS NOT NULL THEN COUNT=COUNT+1; TOTAL=TOTAL+V3; END IF; RETURN TOTAL/COUNT; EXCEPTION WHEN DIVISION_BY_ZERO THEN RETURN NULL; END $FUNCTION$ LANGUAGE PLPGSQL; CREATE OR REPLACE FUNCTION AVERAGE ( V1 NUMERIC, V2 NUMERIC, V3 NUMERIC, V4 NUMERIC) RETURNS NUMERIC AS $FUNCTION$ DECLARE COUNT NUMERIC; TOTAL NUMERIC; BEGIN COUNT=0; TOTAL=0; IF V1 IS NOT NULL THEN COUNT=COUNT+1; TOTAL=TOTAL+V1; END IF; IF V2 IS NOT NULL THEN COUNT=COUNT+1; TOTAL=TOTAL+V2; END IF; IF V3 IS NOT NULL THEN COUNT=COUNT+1; TOTAL=TOTAL+V3; END IF; IF V4 IS NOT NULL THEN COUNT=COUNT+1; TOTAL=TOTAL+V4; END IF; RETURN TOTAL/COUNT; EXCEPTION WHEN DIVISION_BY_ZERO THEN RETURN NULL; END $FUNCTION$ LANGUAGE PLPGSQL; CREATE OR REPLACE FUNCTION AVERAGE ( V1 NUMERIC, V2 NUMERIC, V3 NUMERIC, V4 NUMERIC, V5 NUMERIC) RETURNS NUMERIC AS $FUNCTION$ DECLARE COUNT NUMERIC; TOTAL NUMERIC; BEGIN COUNT=0; TOTAL=0; IF V1 IS NOT NULL THEN COUNT=COUNT+1; TOTAL=TOTAL+V1; END IF; IF V2 IS NOT NULL THEN COUNT=COUNT+1; TOTAL=TOTAL+V2; END IF; IF V3 IS NOT NULL THEN COUNT=COUNT+1; TOTAL=TOTAL+V3; END IF; IF V4 IS NOT NULL THEN COUNT=COUNT+1; TOTAL=TOTAL+V4; END IF; IF V5 IS NOT NULL THEN COUNT=COUNT+1; TOTAL=TOTAL+V5; END IF; RETURN TOTAL/COUNT; EXCEPTION WHEN DIVISION_BY_ZERO THEN RETURN NULL; END $FUNCTION$ LANGUAGE PLPGSQL; CREATE OR REPLACE FUNCTION AVERAGE ( V1 NUMERIC, V2 NUMERIC, V3 NUMERIC, V4 NUMERIC, V5 NUMERIC, V6 NUMERIC) RETURNS NUMERIC AS $FUNCTION$ DECLARE COUNT NUMERIC; TOTAL NUMERIC; BEGIN COUNT=0; TOTAL=0; IF V1 IS NOT NULL THEN COUNT=COUNT+1; TOTAL=TOTAL+V1; END IF; IF V2 IS NOT NULL THEN COUNT=COUNT+1; TOTAL=TOTAL+V2; END IF; IF V3 IS NOT NULL THEN COUNT=COUNT+1; TOTAL=TOTAL+V3; END IF; IF V4 IS NOT NULL THEN COUNT=COUNT+1; TOTAL=TOTAL+V4; END IF; IF V5 IS NOT NULL THEN COUNT=COUNT+1; TOTAL=TOTAL+V5; END IF; IF V6 IS NOT NULL THEN COUNT=COUNT+1; TOTAL=TOTAL+V6; END IF; RETURN TOTAL/COUNT; EXCEPTION WHEN DIVISION_BY_ZERO THEN RETURN NULL; END $FUNCTION$ LANGUAGE PLPGSQL; CREATE OR REPLACE FUNCTION AVERAGE ( V1 NUMERIC, V2 NUMERIC, V3 NUMERIC, V4 NUMERIC, V5 NUMERIC, V6 NUMERIC, V7 NUMERIC) RETURNS NUMERIC AS $FUNCTION$ DECLARE COUNT NUMERIC; TOTAL NUMERIC; BEGIN COUNT=0; TOTAL=0; IF V1 IS NOT NULL THEN COUNT=COUNT+1; TOTAL=TOTAL+V1; END IF; IF V2 IS NOT NULL THEN COUNT=COUNT+1; TOTAL=TOTAL+V2; END IF; IF V3 IS NOT NULL THEN COUNT=COUNT+1; TOTAL=TOTAL+V3; END IF; IF V4 IS NOT NULL THEN COUNT=COUNT+1; TOTAL=TOTAL+V4; END IF; IF V5 IS NOT NULL THEN COUNT=COUNT+1; TOTAL=TOTAL+V5; END IF; IF V6 IS NOT NULL THEN COUNT=COUNT+1; TOTAL=TOTAL+V6; END IF; IF V7 IS NOT NULL THEN COUNT=COUNT+1; TOTAL=TOTAL+V7; END IF; RETURN TOTAL/COUNT; EXCEPTION WHEN DIVISION_BY_ZERO THEN RETURN NULL; END $FUNCTION$ LANGUAGE PLPGSQL; CREATE OR REPLACE FUNCTION AVERAGE ( V1 NUMERIC, V2 NUMERIC, V3 NUMERIC, V4 NUMERIC, V5 NUMERIC, V6 NUMERIC, V7 NUMERIC, V8 NUMERIC) RETURNS NUMERIC AS $FUNCTION$ DECLARE COUNT NUMERIC; TOTAL NUMERIC; BEGIN COUNT=0; TOTAL=0; IF V1 IS NOT NULL THEN COUNT=COUNT+1; TOTAL=TOTAL+V1; END IF; IF V2 IS NOT NULL THEN COUNT=COUNT+1; TOTAL=TOTAL+V2; END IF; IF V3 IS NOT NULL THEN COUNT=COUNT+1; TOTAL=TOTAL+V3; END IF; IF V4 IS NOT NULL THEN COUNT=COUNT+1; TOTAL=TOTAL+V4; END IF; IF V5 IS NOT NULL THEN COUNT=COUNT+1; TOTAL=TOTAL+V5; END IF; IF V6 IS NOT NULL THEN COUNT=COUNT+1; TOTAL=TOTAL+V6; END IF; IF V7 IS NOT NULL THEN COUNT=COUNT+1; TOTAL=TOTAL+V7; END IF; IF V8 IS NOT NULL THEN COUNT=COUNT+1; TOTAL=TOTAL+V8; END IF; RETURN TOTAL/COUNT; EXCEPTION WHEN DIVISION_BY_ZERO THEN RETURN NULL; END $FUNCTION$ LANGUAGE PLPGSQL;
-
==============================
5.
Select Req_ID, sum(R1+R2+R3+R4+R5)/5 as Average from Request Group by Req_ID;
from https://stackoverflow.com/questions/7367750/average-of-multiple-columns by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 지난 3 개월 동안의 데이터를 취득하기위한 SQL 쿼리 (0) | 2020.06.10 |
---|---|
[SQL] 동적 순서 방향 (0) | 2020.06.10 |
[SQL] 젠드 DB를 사용하여 하위 쿼리 작성 (0) | 2020.06.09 |
[SQL] 어떻게이에 상관 이름이 조인 SQL 해결할 수 있습니다? (0) | 2020.06.09 |
[SQL] (SQL에서) COMMIT 문은 지금까지 실패 할 수 있습니까? 어떻게? (0) | 2020.06.09 |