任何人都可以帮我一个简单的SQL查询?
这就是场景:我需要找到参加更多比赛的参赛者.比赛一直在不同的城市和不同的专业.下表更好地显示了我的意思:
亚军:约翰怀特
-----------------------------------------
| NY | Rome | Madrid | Los Angeles |
------------------------------------------------
| 100m | x | | x | |
------------------------------------------------
| 200m | | x | | x |
------------------------------------------------
| 400m | | | | |
------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
简而言之,我有一个包含以下字段的数据库:名称,城市,规格,我需要找到填充更多插槽的跑步者,参加更多不同比赛的跑步者.在"spec"字段中,如果他分别参加每个专业,则数据为100m或200m或300m.在该示例中,结果是John White - > 4
那么,我如何查询列出参加大部分比赛的前十名参赛者?我需要一张表格,显示赛跑者的名字和他参加的比赛数量.
在此先感谢您的帮助.如果您需要更多信息,请询问.
再见,马特
更新:简单来说,我想知道具有最大数量的城市规格字段的不同组合的前10名列表.我认为这是解释我答案的最佳逻辑方式.
以下是数据库的示例:
name city spec
-----------------------
john NY 100m
john Rome 200m
john Madrid 100m
john Los Ang 200m
mike Rome 200m
mike Rome 100m
Run Code Online (Sandbox Code Playgroud)
我正在寻找的"十大名单"将是以下内容:
john 4
mike 2
Run Code Online (Sandbox Code Playgroud)
我希望现在一切都好.再见!
Nik*_*vić 11
也许你正在寻找这样的东西:
select name, count(distinct city) as attended
from competitions
group by name
order by 2 desc
limit 10;
Run Code Online (Sandbox Code Playgroud)
此查询返回竞争对手及其参与的事件数,不包括重复项(同一事件中的100和200米).如果你想计算所有外观删除不同的关键字,并且如果你想显示多功能性列表替换具有不同专业的城市.查询的工作原理是计算属于同一名称的所有行,按该计数递减排序并将输出限制为十行.
更新:我认为OP需要通过外观列出前10名竞争对手.因此,竞争对手的每条记录都算作一个:
select name, count(name) as attended
from competitions
group by name
order by 2 desc
limit 10;
Run Code Online (Sandbox Code Playgroud)
白先生将获得4分,而参加所有3个学科的所有4个比赛的任何人将获得12分.
城市或事件不是无关紧要的吗?难道你不能只计算一个城市中的协会数量吗?看起来每个活动协会都有一个城市,反之亦然?我假设某个地方还有另一个或两个连接表。但我会选择该人在该连接中出现的次数。
SELECT COUNT(*)
FROM city_runner
WHERE runnerid = ? #The runner's id? You gave so little for me to work with...
Run Code Online (Sandbox Code Playgroud)
然后使用您的应用程序语言来确定谁是最好的......