응답시간 빠른순 정렬을 해야하는 데, DB 상에서는 이렇게 표현되어 있다.
00000 은 응답이 없는 것이므로 로직상에서는 빠른순에 해당되지 않고 제일 아래로 가야한다. 그리고 00628 -> 06분 28초가 제일 상위로 올라와야 한다.
즉 기대 결과는 아래와 같이 나와야 한다. (응답없음 00000)
그러면 아래 조건문을 사용해서 union all 로 합치면 된다.
(SELECT cq.* FROM db_platform.COACH_CHAT_RESPONSE cq
WHERE cq.avg_resp_time != "00000"
ORDER BY cq.avg_resp_time*1 ASC)
UNION ALL
(SELECT a.* FROM db_platform.COACH_CHAT_RESPONSE a
WHERE a.avg_resp_time = "00000")
limit 1, 10
그러나 결과는 pk로 순서가 정렬된다.
형식은 이렇다.
SELECT t1.* FROM
(
SELECT ... FROM
(
SELECT ... FROM ...
)
AS t11
GROUP BY ...
ORDER BY ...
) AS t1
UNION
SELECT t2.* FROM
(
SELECT ... FROM
(
SELECT ... FROM ...
)
AS t22
GROUP BY ...
ORDER BY ...
) AS t2
좀 많이 길다... 이거를 진행하고 있는 프로젝트에 적용하면
SELECT t1.* FROM
(SELECT * FROM(SELECT * FROM RESPONSE WHERE resp_time != "00000")
AS t11
GROUP BY t11.pk_index
ORDER BY t11.resp_time*1 ASC
) AS t1
UNION ALL
SELECT t2.* FROM
(SELECT * FROM(SELECT * FROM RESPONSE WHERE resp_time = "00000")
AS t22
GROUP BY t22.pk_index
) AS t2 LIMIT 0, 10
참고 링크 : https://m.blog.naver.com/rorean/221538483386
테이블 생성할 때, 위와 같은 경우도 생각해서 응답이 없는 경우에 대한 컬럼을 하나 생성하는 것이 좋을 거 같다.
테이블별로 쿼리문을 작성하면 다른 사람이 유지보수할 때나 성능면에서도 불리할 거 같다.