컬럼에서 aaa 는 전체점수
bbb는 사용자수 입니다.
select * from TABLE_NAME order by aaa / bbb desc
다음과 같은 정렬로 평균점수로 정렬을 하려고 하는데
division by zero 에러가 나는군요.. MySQL에서는 에러가 안나던데요...
물론 aaa 나 bbb 값에 0 값이 있는 경우도 있습니다.
어떤 다른 방법이 있을까요?
MySQL에서는 되는데, PostgreSQL에서는 안되는 사태는 'MySQL에서만 되는데'로 이해하시면 될듯싶습니다.
다른 RDBMS에서도 대부분 안됩니다.
간단하게, bbb 값이 0보다 큰 것들 가운데서로 한정 지으면 될것 같네요.
select * from where bbb > 0 order by aaa / bbb desc
union
select * from where bbb is null or bbb = 0 order by ....
이렇게...
하면 될 것 같았는데, union 구문에서는 order by 구문이 맨 마지막에 한번만 와야하는지라,
일단 앞부분 쿼리를 inline view로 처리를 해야겠네요.
수정된 쿼리
select * from (select * from where bbb > 0 order by aaa / bbb desc)
select * from where bbb is null or bbb = 0
아... 정말 감사합니다.
그렇게 하면 되겠군요..
아..그리고 MySQL에서만 되는거군요..
0/0 은 원래 에러가 정상인데 MySQL은 그냥 0으로 취급하는거 같더라구요..
아.. 그런데 만일 정렬이 asc라면 컬럼값이 0 인 값을 맨 위로 오도록 할수는 없을까요?
다시 한번 답변 정말 감사합니다.
음.. 테스트해보니 mysql 에선 1/0 을 NULL 로 취급하는군요...
1/0 이 0 이 되어버리면 큰일나죠.. ㅡㅡ;;
이렇게 하면 되지 않을까요?
SELECT *
FROM (select *, CASE WHEN bbb <> 0 THEN aaa / bbb ELSE 0 END as div FROM table_name) a
ORDER BY div asc