对于每行,字段中值的出现次数
Posted
技术标签:
【中文标题】对于每行,字段中值的出现次数【英文标题】:Amount of occurrences of a value in a field, for each row 【发布时间】:2014-05-12 05:27:19 【问题描述】:我希望能够为每一行检索一个字段的一个值的总出现次数。
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。
【问题讨论】:
【参考方案1】:这是你想要的吗?
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);
【讨论】:
我不知道我怎么没看到 :) 与表本身相比!谢谢以上是关于对于每行,字段中值的出现次数的主要内容,如果未能解决你的问题,请参考以下文章