select a.mb_name, b.mb_id, c.mb_id, count(*) as cnt, group_concat(DISTINCT b.wr_12 separator '||') wr_12b, group_concat(DISTINCT c.wr_12 separator '||') wr_12c, count(DISTINCT b.wr_31) as b_name, count(DISTINCT c.wr_31) as c_name , sum(DISTINCT b.wr_31) as totb, sum(DISTINCT c.wr_31) as totc from g5_member a inner join g5_write_csorder b on a.mb_id = b.mb_id inner join g5_write_cscenter c on b.mb_id = c.mb_id
위 소스에서 현재 출력된 값에서
<?php echo round (($row['totc'] / $row['totb'] * 100),1) ?> %
이렇게 퍼센트를 계산하고 있습니다.
ORDER BY에 퍼센트값을 사용하고 싶어서 그러는데... SQL 문에 어떻게 넣어야 할까요?
1. GROUP BY 가 안보이네요?
- 쿼리를 올리다 만 듯 하고
2. Distinct 가 보이네요?
- 다대다 조인으로 인한 카티션곱 중복 문제를 Distinct 로 해결하는 듯 하네요.
- 이는 좋은 방법이 아닙니다. 애초에 중복이 발생되지 않도록 쿼리를 작성하는게 좋습니다.
- 먼저 그룹핑하여 1건을 만들어 1:1 조인을 하는게 좋을 듯 합니다.
SELECT a.mb_id , a.mb_name , b.wr_12b , c.wr_12c , b.b_name , c.c_name , b.totb , c.totc , ROUND(c.totc / b.totb * 100, 1) rat FROM g5_member a INNER JOIN (SELECT mb_id , GROUP_CONCAT(wr_12 SEPARATOR '||') wr_12b , COUNT(*) b_name , SUM(wr_31) totb FROM g5_write_csorder GROUP BY mb_id ) b ON a.mb_id = b.mb_id INNER JOIN (SELECT mb_id , GROUP_CONCAT(wr_12 SEPARATOR '||') wr_12c , COUNT(*) c_name , SUM(wr_31) totc FROM g5_write_cscenter GROUP BY mb_id ) c ON a.mb_id = c.mb_id ORDER BY rat DESC, a.mb_id ;