바람방향 텍스트 avg 뽑을 수 있는 방법 문의드려요 채택완료
안녕하세요
재질문 올려봅니다.. 아래 답변은 정말 많은 도움이 되었습니다. 감사합니다.
mysql db 에
table name : test
답변 5개
바람 방향 평균이라는 의미가 무엇을 의미하는지,
그리고 어떤 목적으로 평균을 내는지에 따라 달라지지 않을까 합니다.
일단 텍스트를 평균으로 내는 건 불가합니다.
위의 예시에서 평균을 내었을때 남동풍이 나와야 한다면, 그건 평균이 아니라, 해당 데이터에서 가장 많은 값이 아닌가요?
댓글을 작성하려면 로그인이 필요합니다.
wind의 값을 텍스트 말고 0~359도로 지정해서 각 바람별 각도를 넣어서 avg하면 될 듯;;
그랬을 때 나오는 값을 특정 범위로 구분하여 바람의 방향을 표기해주면 되겠네요
답변에 대한 댓글 2개
합이 360이 발생하면 반대방향...ㄷㄷ
그러면 90도마다 1~4분기로 분기를 같이 기입해서 따로 평균해서 방향을 잡으면 되지 않을까요?
이것도 분기가 상쇄되는 지점이 오면 표기할 방법이 없네요;;
댓글을 작성하려면 로그인이 필요합니다.
방향을 벡터로 처리하면 될 거 같습니다.
바람 세기를 고려하지 않는다면 벡터 크기를 1로 잡고,
북-(0,1)
동-(1,0)
북동-(1,1) 정확하게는 (1/✓2, 1/✓2)
평균은 벡터 합을 구하고 N으로 나누어주면 되지 않을까요
댓글을 작성하려면 로그인이 필요합니다.
카운팅 횟수에 대한 평균값 중간위치 추출이 목적이라면
이런식으로 응용을 해볼수는 있을것 같습니다.
- Version
</p>
<p>SELECT VERSION();
/*
+------------+
| VERSION() |
+------------+
| 5.7.32-log |
+------------+
*/</p>
<p>
- DDL
</p>
<p>CREATE TABLE test(
`date` int(11) not null,
`time` int(11) not null,
`wind` varchar(50) not null
);</p>
<p>
- Query
</p>
<p>-- query-01
SELECT
winds
-- ,wind_cnt
-- ,rnum
-- ,CEIL(@rownum / 2) - (@rownum % 2) x
FROM
(
-- query-00
SELECT
(@rownum := @rownum + 1) rnum, wind_cnt, GROUP_CONCAT(wind) winds
FROM
(SELECT wind, COUNT(wind) wind_cnt, @rownum := 0 from test GROUP BY wind) tmp
GROUP BY wind_cnt
) tmp
WHERE
rnum > CEIL(@rownum / 2) - (@rownum % 2)
LIMIT 1 OFFSET 0
;</p>
<p>
* 아래부터는 각 DML 에 대한 query-00, query-01 결과 이고
어디까지나 테스트를 위한 구문이니 실제 적용할 쿼리에는 포함되지 않도록 주의하세요
- case-1
</p>
<p>TRUNCATE table test;
INSERT INTO test VALUES
(20221219, 121223, '북풍')
,(20221219, 112223, '남서풍')
,(20221219, 111223, '북서풍')
,(20221219, 101123, '남동풍')
,(20221219, 100923, '남동풍')
,(20221219, 100223, '남서풍')
,(20221219, 100221, '남풍')
,(20221219, 100211, '남동풍')
,(20221219, 100141, '남풍')
;
/*
+------+----------+------------------+
| rnum | wind_cnt | winds |
+------+----------+------------------+
| 1 | 1 | 북풍,북서풍 |
| 2 | 2 | 남풍,남서풍 |
| 3 | 3 | 남동풍 |
+------+----------+------------------+</p>
<p>+------------------+
| winds |
+------------------+
| 남풍,남서풍 |
+------------------+
*/</p>
<p>
- case-2
</p>
<p>TRUNCATE table test;
INSERT INTO test VALUES
(20221219, 121223, '북풍')
,(20221219, 112223, '남서풍')
,(20221219, 111223, '북서풍')
,(20221219, 101123, '남동풍')
,(20221219, 100923, '남동풍')
,(20221219, 100223, '남서풍')
,(20221219, 100221, '남풍')
,(20221219, 100211, '남동풍')
,(20221219, 100141, '남풍')
,(20221219, 100141, '동풍')
,(20221219, 100141, '동풍')
,(20221219, 100141, '동풍')
,(20221219, 100141, '동풍')
,(20221219, 100141, '동풍')
,(20221219, 100141, '서풍')
,(20221219, 100141, '서풍')
,(20221219, 100141, '서풍')
,(20221219, 100141, '서풍')
,(20221219, 100141, '서풍')
,(20221219, 100141, '서풍')
,(20221219, 100141, '서풍')
,(20221219, 100141, '남동풍')
;
/*
+------+----------+------------------+
| rnum | wind_cnt | winds |
+------+----------+------------------+
| 1 | 1 | 북풍,북서풍 |
| 2 | 2 | 남풍,남서풍 |
| 3 | 4 | 남동풍 |
| 4 | 5 | 동풍 |
| 5 | 7 | 서풍 |
+------+----------+------------------+</p>
<p>+-----------+
| winds |
+-----------+
| 남동풍 |
+-----------+
*/</p>
<p>
- case-3
</p>
<p>TRUNCATE table test;
INSERT INTO test VALUES
(20221219, 121223, '1풍')
,(20221219, 121223, '2풍')
,(20221219, 121223, '2풍')
,(20221219, 121223, '3풍')
,(20221219, 121223, '3풍')
,(20221219, 121223, '3풍')
,(20221219, 121223, '3풍')
,(20221219, 121223, '4풍')
,(20221219, 121223, '4풍')
,(20221219, 121223, '4풍')
,(20221219, 121223, '4풍')
,(20221219, 121223, '4풍')
,(20221219, 121223, '4풍')
,(20221219, 121223, '4풍')
,(20221219, 121223, '4풍')
;
/*
+------+----------+-------+
| rnum | wind_cnt | winds |
+------+----------+-------+
| 1 | 1 | 1풍 |
| 2 | 2 | 2풍 |
| 3 | 4 | 3풍 |
| 4 | 8 | 4풍 |
+------+----------+-------+</p>
<p>+-------+
| winds |
+-------+
| 3풍 |
+-------+
*/</p>
<p>
댓글을 작성하려면 로그인이 필요합니다.
안녕하세요.
AVG의 경우 컴럼의 자료형이 숫자만 가능합니다.
숫자로 치환해서 하시던지 아니면 wind2 (숫자) 등을 추가로 만들어 평균을 내어보세요
아래의 내용도 참고를 해보세요.
https://m-datastudy.tistory.com/10
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
이렇게 있으면
180 이 되어 반대 방향이 나옵니다.