2014-05-12 37 views
0

我希望能够检索每个行的一个字段的一个值的总外观次数。每个字段中值的出现次数

CREATE TABLE `events` (
`id` INT NOT NULL AUTO_INCREMENT, 
`country` VARCHAR(2) NOT NULL, 
PRIMARY KEY (`id`)); 

INSERT INTO `events` (`country`) VALUES 
('es'), ('fr'), ('uk'), 
('uk'), ('es'), ('uk'), 
('fr'), ('it'), ('es'), 
('es'), ('it'), ('uk'), 
('fr'), ('es'), ('de') 

也就是说,给出this SQLFiddle,我希望能够一个字段添加到结果,有条件地加场country的每个值的出现次数。

SELECT * from `events`; 

ID | COUNTRY | TIMES 
----+---------+------ 
1 | es  | 5 
2 | fr  | 3 
3 | uk  | 4 
4 | uk  | 4 
5 | es  | 5 
6 | uk  | 4 
7 | fr  | 3 
8 | it  | 2 
9 | es  | 5 
10 | es  | 5 
11 | it  | 2 
12 | uk  | 4 
13 | fr  | 3 
14 | es  | 5 
15 | de  | 1 

如果可能的话,这将是伟大的,部分结果(LIMIT x, y)仍然会返回总金额为每个字段:

SELECT * from `events` LIMIT 3, 7; 

ID | COUNTRY | TIMES 
----+---------+------ 
4 | uk  | 4 
5 | es  | 5 
6 | uk  | 4 
7 | fr  | 3 
8 | it  | 2 
9 | es  | 5 
10 | es  | 5 

this SQLFiddle

回答

0

这是你想要的吗?

select e.*, 
     (select count(*) from events e2 where e2.country = e.country 
     ) as times 
from `events` e; 

它似乎满足您的需求。如果你想实际改变表格:

alter table events add times unsigned; 

update events e 
    set times = (select count(*) from events e2 where e2.country = e.country); 
+0

我不知道我怎么没有看到它:)与表本身相比!谢谢 – Jago

相关问题