텍스트 입력된 row 값들의 text 평균(avg) 텍스트를 구할수 있을까요?
본문
안녕하세요
mysql db 에
table name : test
<row data>
date time person
20221219 121223 사람1
20221219 112223 사람2
20221219 111223 사람3
20221219 101123 사람1
20221219 100923 사람3
20221219 100223 사람1
select avg(person) from test
해 보았는데 숫자 값이 아니라서 그런지 text 값은 avg 값이 0으로만 리턴되던데요
어떻게 하면 위 형식의 데이터에서 평균 데이터 텍스트를 뽑을 수 있나요?
즉 avg는 사람3 이 뽑혀야 하는데 안되어서 문의드립니다.
min(person) 은 사람2
max(person) 은 사람1 은 뽑힙니다.
귀한 답변 부탁드립니다.
감사합니다.
답변 4
select concat('사람', avg(right(person, 1))) from test
mysql의 max, min은 문자열을 사용할 경우
해당 열에 정의한 정렬 순서에서 가장 높고 낮은 값을 찾아줍니다.
하지만 avg 함수의 경우 문자열은 평균치를 구할 수 없습니다.
windNum 정도의 필드를 추가하시고요.
북풍은 0, 동풍은 90, 남풍은 180, 서풍은 270,
북동풍은 45, 남동풍은 135 등으로 이 필드를 세팅해 주시고요.
그리고서 이 필드의 평균을 추출하신 후 text로 변환을 하시면 될 것 같네요.
1. select distinct wind from test 하시면 wind 종류만 나오겠죠.
while ( 각_wind종류 ) {
select count(*) from test where wind = '각_wind종류' 하여 건수를 추출하고,
$windKindArray[각_wind종류] 배열에 합산을 해 줍니다.
}
2. 그러고나면 저 배열은
$windKindArray[동풍] = 3;
$windKindArray[북동풍] = 7;
$windKindArray[남동풍] = 2;
... 등이 되겠죠.
3. 위 3건만 있다고 할 때 배열의 합은 12이고 평균은 4입니다.
4와 가장 가까운 건수의 바람종류를 추출하시면 3건인 동풍이 되겠지요.
최다건수는 북동풍이고 최소건수는 남동풍이겠고요.
즉 이 수치는 가장 많은 쪽으로 분 풍향, 가장 적은 쪽으로 분 풍향, 그리고 가장 중간치로 분 풍향을
구하는 거겠네요.
원하시는 방향이 맞나요? 아니더라도 원하는 값을 구하는 데 참고가 되면 좋겠네요.