개발 Q&A

제목 mysql query 문에 대한 질문요 ?
글쓴이 람이 작성시각 2015/05/14 12:48:01
댓글 : 6 추천 : 0 스크랩 : 0 조회수 : 15928   RSS








위 그림을 차례대로 보시면 
첫번째는 가격 테이블 입니다.
두번째는 상품 테이블 이구요.

세번째에서 보시듯이
상품 테이블과 가격 테이블을 조인해서
오늘날짜 이후의 가격 중에서 가장 낮은 금액을 기준으로 정렬 시키려고 합니다.

근데 쿼리를 돌리면 low에 값이 없거나 아예 정렬이 되지 않네요 ?
어떻게 쿼리를 짜면 좋을까요 ?

조언 부탁 드립니다.

 
 다음글 mysql case when then 에서 여러개의 결... (1)
 이전글 jquery .load() 함수 사용시 멈춤 문제 ;; (1)

댓글

한대승(불의회상) / 2015/05/14 13:00:19 / 추천 0
숫자형으로 변환 해서 정렬 하세요.

http://stackoverflow.com/questions/12126991/cast-from-varchar-to-int-mysql
띠아블 / 2015/05/14 13:24:55 / 추천 0
1. 서브쿼리로 가격을 뽑았는데, right join 은 필요없지 않나요?
2. 오늘날짜 가격이 없는 상품이 있을수 있으니 가격이 없는 데이터도 나올텐데요. 이것을 목록에서 빼고 싶다면 where 절에 가격이 0보다 큰경우에만 출력하도록 하면 될거구요. 뒤에 출력하고 싶으면 order by 절에 if...case... 넣어서 null 이면 2, 값이 있으면 1 로 플래그값을 하나 넣어줘서 정렬하면 됩니다.

 
람이 / 2015/05/14 13:35:24 / 추천 0
한대승님 우선 감사합니다.
띠아블님 우선 감사합니다.

- order by 에 if case 어떻게 넣나요 ?
람이 / 2015/05/14 14:09:24 / 추천 0
한대승님이 알려 주신 링크에서 해결 했네요..

select it_id, it_id as pid, (select CAST(prc_price11 AS UNSIGNED) AS LOWPRIC from wiz_prdprice where prc_price11>0 and it_id = pid order by LOWPRIC asc LIMIT 1) as price
from wiz_product2
group by it_id
order by price asc

감사합니다.
람이 / 2015/05/14 14:11:02 / 추천 0
혹시 가격란에 입력된 값이

달러, 위안, 엔화, 원화 등등 각각으로 입력된 값을

별도의 환율 정보 테이블에 그날 입력된 값과 계산해서 전부 원화로 바꾼다음

그 값으로 SORT (ORDER BY ) 할 수 있을까요 ?
람이 / 2015/05/14 14:46:10 / 추천 0
자문 자답으로 해결 했네요 .
나중을 위해 여기다 답변 달아 놓습니다.

select a.it_id, a.prc_exchange, b.ex_USD1, b.ex_CNY1, b.ex_JPY1, b.ex_EUR1, a.it_id as pid, (select CAST(prc_price11 AS UNSIGNED) AS LOWPRIC from wiz_prdprice where prc_price11>0 and it_id = pid order by LOWPRIC asc LIMIT 1) as price,
CASE a.prc_exchange
    WHEN "KOR"
    THEN CAST(a.prc_price11 AS UNSIGNED)
    WHEN "JPN"
    THEN CAST((a.prc_price11 * b.ex_JPY1) AS UNSIGNED)
    WHEN "USD"
    THEN CAST((a.prc_price11 * b.ex_USD1) AS UNSIGNED)
    WHEN "CHN"
    THEN CAST((a.prc_price11 * b.ex_CNY1) AS UNSIGNED)
    WHEN "ERP"
    THEN CAST((a.prc_price11 * b.ex_EUR1) AS UNSIGNED)
    END SUM
from wiz_prdprice a, exchange b
where a.prc_sdate >= curdate()
and a.prc_price11 > 0
group by a.it_id
order by SUM ASC