2012-01-07 6 views
0

나는 태그 클라우드를 구축하고있어 그것이 큰 사이트 나, 각 요청과 함께 모든 것을 계산 피하기 위해 테이블의 수를 저장하고있어 위해이기 때문에 여기있다 :비율을 어떻게 찾을 수 있습니까?

CREATE TABLE `counts` (
    `name` CHAR(35) NOT NULL DEFAULT '', 
    `total` INT(11) NOT NULL, 
    `type` tinyint(4) NOT NULL, 
    `locale_id` SMALLINT(6) NOT NULL, 
    PRIMARY KEY (`name`,`type`,`locale_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 


INSERT INTO `counts` (`name`, `total`, `type`, `locale_id`) 
VALUES 
    ('k3k3k',888,3,1), 
    ('krkrkrkr',333,3,1), 
    ('zzxzx',22,3,1); 

name 태그 단어이며, totaltag 테이블에 언급 된 횟수입니다. 태그 클라우드를 구축하려면 모든 태그의 비율을 알아야합니다.

어떻게하면됩니까?

감사합니다.

답변

3
select 
    name, 
    total, 
    total/(select sum(total) from counts)*100 as percentage 
    from counts 
+0

나는 기본 소스의 각 행에서 해당 하위 쿼리가 실행됩니까? –

+0

아니요, 아시다시피 스칼라로 간주되어 한 번 평가됩니다. –

1

정상화! 즉, 최대 개수를 선택하고 그 위에 다른 모든 개수를 지정하십시오.

SELECT name, (total/@max_count * 100) percentage 
FROM counts, (SELECT @max_count := MAX(total) FROM counts) t1; 

결과 :

+----------+------------+ 
| name  | percentage | 
+----------+------------+ 
| k3k3k | 100.0000 | 
| krkrkrkr | 37.5000 | 
| zzxzx |  2.4775 | 
+----------+------------+ 

또는이 그것을해야처럼 대신 MAX

SELECT name, (total/@max_count * 100) percentage 
FROM counts, (SELECT @max_count := SUM(total) FROM counts) t1; 


+----------+------------+ 
| name  | percentage | 
+----------+------------+ 
| k3k3k | 71.4401 | 
| krkrkrkr | 26.7900 | 
| zzxzx |  1.7699 | 
+----------+------------+ 
+0

서브 쿼리를 왜'FROM'에 넣었고 이전의'SELECT'에 넣지 않았습니까? –

2

뭔가의 SUM를 사용할 수 있습니다

SELECT name,(total/(SELECT SUM(total) FROM counts)) * 100 
FROM counts WHERE name = 'k3k3k' 

당신에게 내 원하는 것은 반올림 일 전자 결과 또는 일부 다른 서식을 ...

관련 문제