나는이 질문의 목적을 위해 아래에 다소 단순화 한 약간 복잡한 쿼리를 실행합니다. 나는 2 개의 테이블을 가지고있다.그룹에 대한 분 선택
TABLE: plan_costs
id, plan_id, cost, special_cost + more columns....
1 1 23.00 12.00
2 1 25.00 15.00
3 2 5.00 2.00
4 2 45.00 28.00
5 3 35.00 30.00
6 3 65.00 60.00
TABLE: plan_details
plan_id, group_id, + more columns....
1 1
2 1
3 2
은 내가 필요한 것은 (이 경우 5, 30)이 개 값 만 그룹당 하나의 계획 사이의 저렴한 계획의 목록입니다. 아래의 계획을 실행하면 그룹당 하나의 계획이 있지만 항상 가장 저렴한 계획은 아닙니다. 참고 : 0이 아닌 비용보다 special_cost를 우선 사용하는 사례 조건이 있습니다. 어떤 아이디어입니까?
SELECT p1.id,
p2.plan_id,
p1.cost,
p1.special_cost CASE
WHEN p1.special_cost = 0 THEN MIN(p1.cost)
ELSE MIN(p1.special_cost)
END AS cost_order,
FROM plan_costs AS p1
LEFT JOIN plan_details AS p2 ON (p2.plan_id = p1.plan_id)
WHERE CASE
WHEN p1.special_cost = 0 THEN p1.cost >= 5
ELSE p1.special_cost >= 5
END
AND CASE
WHEN p1.special_cost = 0 THEN p1.cost <= 30
ELSE p1.special_cost <= 30
END
GROUP BY p2.group_id
ORDER BY CASE
WHEN p1.special_cost = 0 THEN p1.cost
ELSE p1.special_cost
END ASC
편집 : 내가
을 필요로 최종 결과를 추가필수 결과 :
id, plan_id, cost, special_cost
1 1 23.00 12.00
5 3 35.00 30.00
게시 한 샘플 데이터에 대해 원하는 결과는 무엇입니까? –
특별 비용은 비용보다 적습니까? –
@Mahmoud Gamal 결과 목록을 html로 출력합니다. – Mark