이름과 시 분 초 밀리초 이런 형식으로 테이블 c가 구성되어 있습니다.
그래서
컬럼a 컬럼b
영수 59:02:11.98
차희 10.79
성지 25:34.21
이런식으로 구성되어있습니다.
그래서 3사람의 평균을 밀리세컨드 단위까지 구할려고 하는데 어떻게 하면 좋을까요?(단 b는 varchar형입니다.)
.
Comment 6
-
처리짱
2016.07.07 15:43
-
하늘의유실물
2016.07.07 16:55
답변 감사드립니다.
그런데 제가 질문을 한 의도는 이것을 개별로 구해서 평균이 아니라 select C.B from C의 형태로 한번에 묶어서 평균을 내는 조회를 할려고 하는 것입니다. 답변 글처럼 개별로 하면은 가능하겠지만 저는 한번의 쿼리로 긁어서 출력을 하고 싶습니다.
작성해주신 방식대로 하면은 dateadd 함수를 쓸때 dateadd 함수의 인수 2에 대한 데이터 형식 varchar가 잘못되었습니다가 뜨네요.
한번에 조회해서 나오는 쿼리가 없을까요?
-
항해자™
2016.07.07 19:39
저장하는 방식을 변경해 보는건 어떨까요?
정수 부분을 초단위로 저장하면 좀 쉽게 계산할 수 있을꺼 같은데요?
예를들어 25:34.21 -> 1534.21 -
항해자™
2016.07.07 19:43
평균 구할 때는 avg(cTime) 해주면 평균나오고 초단위니, 시간형태로 바꾸는건 일도 아니겠네요,, -
하늘의유실물
2016.07.08 22:22
답변해주신 모든분들께 감사합니다! -
처리짱
2016.07.11 11:43
윕에 DATEADD 해서 FLOAT로 만드는 부분을 함수로 만들어서..
AVG를 하시면 될거 같습니다..
함수를 만들어야 할거 같네요..
영수 - > CONVERT(FLOAT, DATEADD(HOUR, 59, 0) + DATEADD(MINUTE, 2, 0) + DATEADD(SECOND, 11, 0) + DATEADD(MILLISECOND, 98, 0)) -> 2.45986087962963
차희 -> CONVERT(FLOAT, DATEADD(SECOND, 10, 0) + DATEADD(MILLISECOND, 790, 0)) -> 0.000124884259259259
성지 -> CONVERT(FLOAT, DATEADD(MINUTE, 25, 0) + DATEADD(SECOND, 34, 0) + DATEADD(MILLISECOND, 210, 0)) -> 0.0177570601851852
이런식으로 표현이 될거고 3개의 평균을 내면 0.825914274691358153000
소수점 위는 하루를 나타내니 시간쪽에 24를 더해주면 되고 소수점이하를 시간으로 표현하면
SELECT CONVERT(DATETIME,0.825914274691358153000) -> 1900-01-01 19:49:18.993
19:49:18.993 이게 평균값이겠네요.