获取数据库中每个不同值的总和

时间:2013-05-23 03:05:27

标签: mysql sql

我有一个Fantasy Football Managers数据库,每个团队都有15名玩家。我可以通过以下方式列出其中包含“Robin Van Persie”的所有球队。

SELECT * 
FROM `players` 
WHERE MATCH(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15) 
AGAINST ('Robin Van Persie' IN BOOLEAN MODE)

我可以这样做来计算其中有多少人有“Robin Van Persie”(只返回一个数字)。

SELECT count(*) 
FROM `players` 
WHERE MATCH(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15) 
AGAINST ('Robin Van Persie' IN BOOLEAN MODE)

但是有没有办法让我得到一个类似的列表?

Count | Player Name
-------------------------
62    | Robin Van Persie
12    | Wayne Rooney
22    | Michu
31    | Theo Walcott

对于数据库中的每个不同值?

1 个答案:

答案 0 :(得分:1)

你真的想拥有三张桌子。

表1
在"球员"表,您有2列:主要ID,以及所有玩家的列表。

表2
"经理"表还有2列:每个管理器名称和主要ID。

表3
"经理_玩家" table将每个经理的主要ID与其团队中每个玩家的主要ID相关联。从技术上讲,这个表有3列:表主ID,管理员ID和玩家ID。因此,此表将具有相同经理ID和相同玩家ID的多个实例。

使用此结构,您可以运行这样的查询(可能需要在内部联接上使用" binarys"):

SELECT m.name, count(mp.player_id) as count
FROM managers_players mp
inner join managers m
on  mp.manager_id =  m.id
inner join players p
on p.id = mp.player_id
group by m.id
order by count DESC;

这种模式也可以让每个经理团队中的玩家都很容易看到:

SELECT p.name
FROM managers_players mp
inner join managers m
on m.id = mp.manager_id
inner join players p
on p.id = mp.player id
where m.name like '%Manager Name%';

或执行select m.name并将where子句更改为p.name,以查看拥有特定玩家的所有经理。