퍼센트를 계산하고 싶습니다. 0 3 141

by 밀랍 [2021.11.21 11:43:40]


        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  문에 어떻게 넣어야 할까요?

by 우주민 [2021.11.22 09:29:08]

단순하게 order by 를 위한 거라면 그냥 컬럼 순서에 대한 order by 를 하시는게 나을수도 있을듯 한데요.

퍼센트의 크기는 분자의 크기와 비례하니까 totc 열로 order by 하시는게 어떠실지....

order by 10 -- totc 컬럼의 순서

 


by 마농 [2021.11.22 09:37:35]

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
;

 


by 우주민 [2021.11.22 09:43:48]

order by 에 alias 명칭을 써도 적용이 되는가보네요.

안된다고 알고있었는데...

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입