t | h | v |
---|---|---|
1.00000 | 1.02222 | 2.91111 |
1.00000 | 1.04444 | 2.86667 |
1.00000 | 1.53333 | 2.75556 |
1.00000 | 1.30769 | 2.84615 |
1.00000 | 1.04444 | 2.88889 |
1.00000 | 1.30769 | 2.84615 |
1.00000 | 1.06667 | 2.80000 |
다음과 같은 데이터가 있다고 할때 이녀석들을 통계 형태로 뽑아 내고 싶습니다. 기준은 t필드입니다.
출력 형태는 그냥 임시로 카운트 했습니다.
t값대비 v값 -10% | t값대비 v값 -10%이상10%이하 |
t값대비 v값 10%이상 20%이하 |
t값대비 v값 20%이상 |
|
t값대비 h값 -10%미만 | 0 | 0 | 0 | 0 |
t값대비 h값 -10%이상 10미만 | 1 | 7 | 0 | 0 |
t값대비 h값 10%이상 20미만 | 1 | 0 | 0 | 0 |
t값대비 h값 20%이상 | 0 | 0 | 0 | 0 |
어떻게 하면 이런식으로 출력할 수 있을까요?? 고수님들 도움 부탁드립니다.
도무지 감이 안잡히네요...ㅠㅠ
질문하실때 이런식으로 표현되었음 좋겠다 하고서, 값은 아무렇게나 적지 말아 주세요.
원본 대비 결과표로 정확한 값을 적어 주세요.
질문을 이해하는데 방해가 됩니다. 헷갈려요.
WITH t AS ( SELECT 1.00000 t, 1.02222 h, 2.91111 v UNION ALL SELECT 1.00000, 1.04444, 2.86667 UNION ALL SELECT 1.00000, 1.53333, 2.75556 UNION ALL SELECT 1.00000, 1.30769, 2.84615 UNION ALL SELECT 1.00000, 1.04444, 2.88889 UNION ALL SELECT 1.00000, 1.30769, 2.84615 UNION ALL SELECT 1.00000, 1.06667, 2.80000 ) SELECT a.seq , CASE a.seq WHEN 1 THEN '-10%미만' WHEN 2 THEN '-10%이상~10%미만' WHEN 3 THEN ' 10%이상~20%미만' WHEN 4 THEN ' 20%이상' END "t값대비 h값" , COUNT(CASE v WHEN 1 THEN 1 END) "t값대비 v값 -10%미만" , COUNT(CASE v WHEN 2 THEN 1 END) "t값대비 v값 -10%이상~10%미만" , COUNT(CASE v WHEN 3 THEN 1 END) "t값대비 v값 10%이상~20%미만" , COUNT(CASE v WHEN 4 THEN 1 END) "t값대비 v값 20%이상" FROM (SELECT * FROM seq_1_to_4) a -- MariaDB 전용 LEFT OUTER JOIN (SELECT CASE WHEN h < -10 THEN 1 WHEN h >= -10 AND h < 10 THEN 2 WHEN h >= 10 AND h < 20 THEN 3 WHEN h >= 20 THEN 4 END h , CASE WHEN v < -10 THEN 1 WHEN v >= -10 AND v < 10 THEN 2 WHEN v >= 10 AND v < 20 THEN 3 WHEN v >= 20 THEN 4 END v FROM (SELECT (h / t - 1) * 100 h , (v / t - 1) * 100 v FROM t ) a ) b ON a.seq = b.h GROUP BY a.seq ;
WITH data_t AS ( SELECT 1.00000 t, 1.02222 h, 2.91111 v UNION ALL SELECT 1.00000, 1.04444, 2.86667 UNION ALL SELECT 1.00000, 1.53333, 2.75556 UNION ALL SELECT 1.00000, 1.30769, 2.84615 UNION ALL SELECT 1.00000, 1.04444, 2.88889 UNION ALL SELECT 1.00000, 1.30769, 2.84615 UNION ALL SELECT 1.00000, 1.06667, 2.80000 ) , code_t AS ( SELECT 1 seq, -9999 x, -10 y, '-10%미만' z UNION ALL SELECT 2, -10, 10, '-10%이상~10%미만' UNION ALL SELECT 3, 10, 20, ' 10%이상~20%미만' UNION ALL SELECT 4, 20, 9999, ' 20%이상' ) SELECT a.seq , a.z "t값대비 h값" , COUNT(CASE c.seq WHEN 1 THEN 1 END) "t값대비 v값 -10%미만" , COUNT(CASE c.seq WHEN 2 THEN 1 END) "t값대비 v값 -10%이상~10%미만" , COUNT(CASE c.seq WHEN 3 THEN 1 END) "t값대비 v값 10%이상~20%미만" , COUNT(CASE c.seq WHEN 4 THEN 1 END) "t값대비 v값 20%이상" FROM code_t a LEFT OUTER JOIN (SELECT (h / t - 1) * 100 h , (v / t - 1) * 100 v FROM data_t ) b ON b.h >= a.x AND b.h < a.y LEFT OUTER JOIN code_t c ON b.v >= c.x AND b.v < c.y GROUP BY a.seq, a.z ;