2017-04-04 55 views
0

我有一些追踪赛的结果表,这里有一张表在每张表中的所有参赛者,我可以过滤掉一个参赛者并看到他们的比赛结果,但我想要要计算总选手在比赛中表现出结束位置,这个查询获取我几乎存在,但其在表计数的所有记录按列分组记录总记录数MYSQL

SELECT (select count(ID) 
     FROM `results` 
     where Race = results.race) as TotalRunners, fullname, place 
from results 
where fullname = 'Michael Todd' 

所以我需要Race = results.race是由场分组

这是当前输出

TotalRunners 
fullname 
place 
4815 
Michael Todd 
3 
4815 
Michael Todd 
2 
4815 
Michael Todd 
6 
4815 
Michael Todd 
5 
4815 
Michael Todd 
10 
4815 
Michael Todd 
12 
4815 
Michael Todd 
2 
4815 
Michael Todd 
4 
4815 
Michael Todd 
5 
4815 
Michael Todd 
15 
4815 
Michael Todd 
5 
4815 
Michael Todd 
23 
4815 
Michael Todd 
3 

4815值应该是每场比赛的总跑者。

回答

0

假设这样的:

fullname  | place | race 
============================= 
michael todd | 4 | 1 
michael todd | 3 | 2 
michael todd | 9 | 3 
bob sanchez | 2 | 1 
bob sanchez | 1 | 2 
bob sanchez | 5 | 3 




SELECT *, 
(
    SELECT count(*) FROM runners WHERE runners.race = r.race 
) AS total_runners 
FROM runners r 
WHERE 
    fullname = "Michael Todd" 
GROUP BY 
race 

由一个人进行查询时应该返回运动员的正确计数。

CREATE TABLE `runners` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
`race` int(11) DEFAULT NULL, 
`fullname` varchar(50) DEFAULT NULL, 
`position` int(11) DEFAULT NULL, 
PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8; 



INSERT INTO `runners` (`id`, `race`, `fullname`, `position`) 
VALUES 
    (1, 1, 'Michael Todd', 1), 
    (2, 2, 'Michael Todd', 5), 
    (3, 3, 'Michael Todd', 8), 
    (4, 1, 'Miguel Sanchez', 2), 
    (5, 2, 'Miguel Sanchez', 4), 
    (6, 3, 'Miguel Sanchez', 13), 
    (7, 1, 'Bob Villa', 22), 
    (8, 3, 'Bob Villa', 3); 

SQL小提琴:

http://sqlfiddle.com/#!9/5af3dc/1