[SQL] 평균 및 그룹 별과 SQL 쿼리
SQL평균 및 그룹 별과 SQL 쿼리
내가 MySQL을위한 SQL 쿼리를 작성하는 몇 가지 문제가있다. 나는 다음과 같은 구조의 테이블이 있습니다 :
mysql> select id, pass, val from data_r1 limit 10;
+------------+--------------+----------------+
| id | pass | val |
+------------+--------------+----------------+
| DA02959106 | 5.0000000000 | 44.4007000000 |
| 08A5969201 | 1.0000000000 | 182.4100000000 |
| 08A5969201 | 2.0000000000 | 138.7880000000 |
| DA02882103 | 5.0000000000 | 44.7265000000 |
| DA02959106 | 1.0000000000 | 186.1470000000 |
| DA02959106 | 2.0000000000 | 148.2660000000 |
| DA02959106 | 3.0000000000 | 111.9050000000 |
| DA02959106 | 4.0000000000 | 76.1485000000 |
| DA02959106 | 5.0000000000 | 44.4007000000 |
| DA02959106 | 4.0000000000 | 76.6485000000 |
나는 테이블에서 다음과 같은 정보를 추출하는 쿼리를 만들려면 :
id, AVG of 'val' for 'pass' = 1, AVG of 'val' for 'pass' = 2, etc
쿼리의 결과는 다음과 같아야합니다 :
+------------+---------+---------+---------+---------+---------+---------+---------+
| id | val_1 | val_2 | val_3 | val_4 | val_5 | val_6 | val_7 |
+------------+---------+---------+---------+---------+---------+---------+---------+
| DA02959106 | 186.147 | 148.266 | 111.905 | 76.3985 | 44.4007 | 0 | 0 |
+------------+---------+---------+---------+---------+---------+---------+---------+
물론 각각의 고유 한 'ID'에 대한 더 많은 행과.
이미 일부 쿼리는 같은 시도
SELECT id, pass, AVG(val) AS val_1 FROM data_r1 WHERE pass = 1 GROUP BY id;
이 반환 올바른 결과,하지만 난 '패스'의 다른 가능한 값에 대한 결과를 확장해야합니다 (최대 7)
저는 AVG 내에서 중첩 된 SELECT를 사용하려고하지만 제대로 현재 'ID'로 제한하는 방법을 알아낼하지 않았기 때문에이 작동하지 않았다.
그때 나는 등 '패스'= 1, '패스'= 2, 각 쿼리의 결과를 나타내는 뷰를 생성하지만로부터 최종 결과를 얻기 위해 쿼리를 조인을 사용하면 대부분의 ID에 대한 '통과'에 대한 가장 높은 값은 5입니다 보기는 내가보기의 일부가 비어 있기 때문에 / 특정 'ID'값이없는 빈 결과 집합을 받았다.
어떤 아이디어?
해결법
-
==============================
1.나는 당신이 필요로하는 것을 이해한다면,이 시도 :
나는 당신이 필요로하는 것을 이해한다면,이 시도 :
SELECT id, pass, AVG(val) AS val_1 FROM data_r1 GROUP BY id, pass;
또는, 당신은 모든 ID에 대해 하나 개의 행을 원하는 경우,이 :
SELECT d1.id, (SELECT IFNULL(ROUND(AVG(d2.val), 4) ,0) FROM data_r1 d2 WHERE d2.id = d1.id AND pass = 1) as val_1, (SELECT IFNULL(ROUND(AVG(d2.val), 4) ,0) FROM data_r1 d2 WHERE d2.id = d1.id AND pass = 2) as val_2, (SELECT IFNULL(ROUND(AVG(d2.val), 4) ,0) FROM data_r1 d2 WHERE d2.id = d1.id AND pass = 3) as val_3, (SELECT IFNULL(ROUND(AVG(d2.val), 4) ,0) FROM data_r1 d2 WHERE d2.id = d1.id AND pass = 4) as val_4, (SELECT IFNULL(ROUND(AVG(d2.val), 4) ,0) FROM data_r1 d2 WHERE d2.id = d1.id AND pass = 5) as val_5, (SELECT IFNULL(ROUND(AVG(d2.val), 4) ,0) FROM data_r1 d2 WHERE d2.id = d1.id AND pass = 6) as val_6, (SELECT IFNULL(ROUND(AVG(d2.val), 4) ,0) FROM data_r1 d2 WHERE d2.id = d1.id AND pass = 7) as val_7 from data_r1 d1 GROUP BY d1.id
-
==============================
2.내가 알고있는 것처럼, 각 패스에서 각 ID에 대한 평균값을합니다. 이 솔루션은
내가 알고있는 것처럼, 각 패스에서 각 ID에 대한 평균값을합니다. 이 솔루션은
SELECT id, pass, avg(value) FROM data_r1 GROUP BY id, pass;
from https://stackoverflow.com/questions/10702546/sql-query-with-avg-and-group-by by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 모든 행에 두 개의 열이 표시 총계에 의해 그룹 (0) | 2020.07.07 |
---|---|
[SQL] 어떻게 ExecuteNonQuery는 ()를 사용할 때 발생하는 오류 메시지를받을 수 있나요? (0) | 2020.07.07 |
[SQL] WHERE, SQL Server의 CASE (0) | 2020.07.07 |
[SQL] T-SQL의 UPDATE의 모든 행에 대해 RAND 차이가 (0) | 2020.07.07 |
[SQL] "ORA-01438 :이 항목 허용 지정된 정밀도보다 큰 값"3을 삽입 할 때 (0) | 2020.07.07 |