sql查询前10条记录

时间:2012-03-18 00:49:07

标签: mysql sql

任何人都可以帮我一个简单的SQL查询吗?

这就是场景:我需要找到参加更多比赛的选手。比赛一直在不同的城市和不同的专业。下表更好地表达了我的意思:

亚军:约翰怀特

        -----------------------------------------
        |  NY  |  Rome |  Madrid |  Los Angeles |
 ------------------------------------------------
 | 100m |  x   |       |   x     |              |
 ------------------------------------------------
 | 200m |      |  x    |         |      x       |
 ------------------------------------------------
 | 400m |      |       |         |              |
 ------------------------------------------------

简而言之,我有一个包含以下字段的数据库:名称,城市,规格,我需要找到填充更多位置的跑步者,参加更多不同比赛的跑步者。 在“规格”字段中,如果他分别参加每个专业,则数据为100米或200米或300米 在该示例中,结果是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

我正在寻找的“前10名”将是以下内容:

john   4
mike   2

我希望现在一切都好。再见!

4 个答案:

答案 0 :(得分:9)

也许你正在寻找这样的东西:

select name, count(distinct city) as attended
  from competitions
 group by name
 order by 2 desc
 limit 10;

此查询返回竞争对手及其参与的事件数,不包括重复项(同一事件中的100和200米)。如果您想计算所有外观,请删除 distinct 关键字,如果您想显示多功能性列表,请将 city 替换为不同的专业。查询的工作原理是计算属于同一名称的所有行,按该计数递减排序并将输出限制为十行。

更新:我认为OP需要按外观列出前10名竞争对手。因此,竞争对手的每条记录都算作一个:

select name, count(name) as attended
  from competitions
 group by name
 order by 2 desc
 limit 10;

白先生将获得4分,所有3个学科参加所有4项比赛的人将获得12分。

答案 1 :(得分:0)

城市或活动不会无关紧要吗?难道你不能只考虑一个城市中的协会,看看每个活动协会看起来像一个城市,反之亦然?我假设还有一个或两个连接表。但我会选择该人在该联接中出现的次数。

SELECT COUNT(*)
FROM city_runner
WHERE runnerid = ? #The runner's id? You gave so little for me to work with...

然后使用您的应用程序语言来确定谁是最棒的......

答案 2 :(得分:0)

这实际上在很大程度上取决于数据的结构。我可以想象你有一张表

city|name|spec

在这种情况下,您的解决方案很简单:

SELECT TOP 10 name, total_races
FROM (
  SELECT COUNT(*) as total_races, name
  FROM thattable
  GROUP BY name
) as t1
ORDER BY total_races DESC

如果您的数据存储方式不同,查询将会有所不同,显然是

编辑:你的桌子真的是一样的。我将查询编辑为name而不是runner,但它仍然是相同的答案

答案 3 :(得分:0)

这样可以找到第n个最大数

    SELECT TOP  nth_largest_no * FROM Products Order by price desc

例如

  SELECT TOP  10 * FROM Products Order by price desc;