2012-01-07 5 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 является тег словом и total сколько раз это указано в таблице tag. Мне нужно получить процент каждого тега для создания облака тегов.

Как я могу это сделать?

Спасибо.

ответ

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 | 
+----------+------------+ 

Или вы можете использовать SUM вместо 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

Что-то вроде этого следует сделать это:

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

Вам свою скругления го e result или сделать другое форматирование ...

Смежные вопросы