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

标签 mysql sql

我有一个 Fantasy Football 经理和他们每支球队的 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

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

最佳答案

你真的想要三张 table 。

表 1
在“玩家”表中,您有 2 列:主要 ID 和所有玩家的列表。

表 2
“经理”表也有 2 列:每个经理姓名和一个主要 ID。

表 3
“managers_players”表将每个经理的主要 ID 与其团队中每个球员的主要 ID 相关联。所以从技术上讲,这个表有 3 列:表主 ID、经理 ID 和玩家 ID。所以这个表将有多个相同经理 ID 和相同玩家 ID 的实例。

使用这种结构,您可以运行这样的查询(可能需要在内连接上使用“二进制文件”):

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 以查看拥有特定球员的所有经理。

关于mysql - 获取数据库中每个不同值的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16705003/

相关文章:

php - 如何在 MySQL 中更新或插入具有多对多关系的行

mysql - 是否可以在其创建语句之前定义 MySQL 表注释?

mysql 在我的查询中转义特殊的 4 个字符

MySQL - 在 WHERE IN 查询中保留重复项和顺序

mysql - SQL根据日期和另一列减去两行

php - 无法从 mysql 存储过程中看到任何值

mysql - 将类型为 "bit"的 MySQL 字段添加到 FuelPHP 模型中

mysql - mySQL和关系数据库:如何在应用程序级别处理分片/拆分?

java - 关于 SQL 目录的问题 - 它们到底是什么?

sql - 哪个查询计划更快/更好