programing

필드 이름을 지정하지 않고 보기에서 모든 필드의 모든 평균을 선택합니다.

sourcejob 2022. 12. 3. 00:29
반응형

필드 이름을 지정하지 않고 보기에서 모든 필드의 모든 평균을 선택합니다.

그래서 제 데이터베이스에는 꽤 넓은 시야가 있습니다.여러 테이블에서 생성된 다음과 같은 더미 뷰가 있습니다. SELECT * FROM view_name;는 다음 결과를 산출합니다.

field1      field2      field3      field4      field5
----------  ----------  ----------  ----------  ----------
1           4           7           10          15
2           5           8           11          14
3           6           9           12          13

평균을 얻으려면 평균을 구하는 각 필드에 이름을 붙여야 합니다.

SELECT avg(field1), avg(field2), avg(field3), avg(field4), avg(field5) FROM view_name;

결과는 다음과 같습니다.

avg(field1)  avg(field2)  avg(field3)  avg(field4)  avg(field5)
-----------  -----------  -----------  -----------  -----------
2.0          5.0          8.0          11.0         14.0

실제 사용 사례 중에는 보고서와 같은 목적으로 20~25필드의 뷰가 있는 것도 있습니다.평균을 얻고 싶은 열을 일일이 지정하지 않아도 되고 이에 대한 해결 방법이 있는지 궁금하면 쿼리 작성이 훨씬 쉬워집니다.제가 사용하고 있는 데이터베이스는 sqlite와 mariadb이기 때문에 둘 중 어느 쪽이라도 사용할 수 있는 솔루션이 좋습니다.

즉, 다음과 같이 필드 이름을 지정하지 않고 모든 필드의 평균을 모두 가져오도록 지정하는 방법을 찾고 있습니다.SELECT *위의 쿼리와 동일하게 동작하여 반환한다.구문을 위반하는 아날로그는

SELECT * FROM view_name그리고.SELECT AVG(*) FROM view_name

작성한 더미 뷰를 사용하는 경우 더미 테이블을 사용하여 시뮬레이트할 수 있습니다(상기한 바와 같이 실제 뷰는 이 테이블보다 훨씬 넓습니다).

CREATE table dummy (
field1 int,
field2 int,
field3 int,
field4 int,
field5 int
);

INSERT INTO dummy VALUES (1,4,7,10,15);
INSERT INTO dummy VALUES (2,5,8,11,14);
INSERT INTO dummy VALUES (3,6,9,12,13);
SELECT CONCAT('SELECT ', GROUP_CONCAT(CONCAT('AVG(',column_name,')')),' FROM view_name') 
FROM information_schema.columns WHERE table_name = 'view_name' INTO @query;
PREPARE stmt FROM @query;
EXECUTE stmt;

+-------------+-------------+-------------+-------------+-------------+
| AVG(field1) | AVG(field2) | AVG(field3) | AVG(field4) | AVG(field5) |
+-------------+-------------+-------------+-------------+-------------+
|      2.0000 |      5.0000 |      8.0000 |     11.0000 |     14.0000 |
+-------------+-------------+-------------+-------------+-------------+

또, 보존 루틴으로 랩 해, 뷰명을 파라메타로 할 수 있다.그 생각은 이다INFORMATION_SCHEMA.COLUMNS에는 테이블 또는 뷰의 모든 컬럼 이름이 포함되어 있으며 다양한 기준을 사용하여 검색 및 필터링할 수 있습니다.

언급URL : https://stackoverflow.com/questions/41142864/select-all-averages-of-all-fields-from-a-view-without-specifying-field-names

반응형