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')

也就是说,给定这个 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

按照这个 SQLFiddle

4

1 回答 1

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);
于 2014-05-12T05:29:59.953 回答