2014-05-12 35 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

相關問題