Mysql 前三名国家

Mysql 前三名国家,mysql,Mysql,我的问题肯定是老生常谈,但我无法设置sql查询,使我能够为体育赛事汇总表列出前三名国家。 我解释得更好:在一项体育赛事中,我有很多来自不同国家的运动员,我需要制作一个汇总表,显示赢得更多奖牌的国家。 以下是一个例子: -------------------------------------------- |id | name | activity | country | -------------------------------------------- | 1 |

我的问题肯定是老生常谈,但我无法设置sql查询,使我能够为体育赛事汇总表列出前三名国家。 我解释得更好:在一项体育赛事中,我有很多来自不同国家的运动员,我需要制作一个汇总表,显示赢得更多奖牌的国家。 以下是一个例子:

--------------------------------------------
|id |     name    |   activity  | country  |
--------------------------------------------
| 1 |  John       |   100m      |  USA     |
| 2 |  Andy       |   200m      |  CANADA  |
| 3 |  Frank      |   400m      |  USA     |
| 4 |  Ian        |   400m      |  GERMANY |
| 5 |  Anthony    |   100m      |  USA     |
| 6 |  Eric       |   400m      |  CANADA  |
| 7 |  Mike       |   200m      |  UK      |
| 8 |  Dave       |   200m      |  GERMANY |
| 9 |  Richard    |   100m      |  USA     |
| 10|  Max        |   100m      |  USA     |
| 11|  Randy      |   100m      |  USA     |
| 12|  Maurice    |   400m      |  CANADA  |
| 13|  Col        |   100m      |  UK      |
| 14|  Jim        |   400m      |  USA     |
| 15|  Adam       |   200m      |  BRAZIL  |
| 16|  Ricky      |   100m      |  UK      |
| 17|  Emily      |   400m      |  USA     |
| 18|  Serge      |   200m      |  UK      |
| 19|  Alex       |   400m      |  FRANCE  |
| 20|  Enamuel    |   100m      |  USA     |
--------------------------------------------
我希望获得的汇总表如下:

前三名国家

--------------------------------------
| position |    country    | medals  |
--------------------------------------
|     1    |     USA       |    9    |
|     2    |     UK        |    4    |
|     3    |     CANADA    |    3    |
--------------------------------------
如何构建qsl查询? 提前感谢您的友好回答


Mattew

没有位置列,这非常容易。只需执行以下操作

SELECT Country,COUNT(*) AS medals
FROM MyTable
GROUP BY Country
ORDER BY COUNT(*) DESC
LIMIT 3;
有一些更复杂的代码用于获取“position”列,但除非您需要,否则可能没有必要这样做,您可以使用处理代码上的计数器获取这些数字。如果您感兴趣,代码应该是这样的

SELECT @rownum:=@rownum+1 AS Position,Country,Medals FROM
(
SELECT Country,COUNT(*) AS medals
FROM Medals
GROUP BY Country
ORDER BY COUNT(*) DESC
LIMIT 3
) AS Stats, (SELECT @rownum:=0) RowNum;

上面的查询已经过测试,似乎可以按照您的需要工作。

如果没有“位置”列,这是非常简单的。只需执行以下操作

SELECT Country,COUNT(*) AS medals
FROM MyTable
GROUP BY Country
ORDER BY COUNT(*) DESC
LIMIT 3;
有一些更复杂的代码用于获取“position”列,但除非您需要,否则可能没有必要这样做,您可以使用处理代码上的计数器获取这些数字。如果您感兴趣,代码应该是这样的

SELECT @rownum:=@rownum+1 AS Position,Country,Medals FROM
(
SELECT Country,COUNT(*) AS medals
FROM Medals
GROUP BY Country
ORDER BY COUNT(*) DESC
LIMIT 3
) AS Stats, (SELECT @rownum:=0) RowNum;

上面的查询已经过测试,并且似乎可以按您的需要工作。

如果您可以将其添加到程序逻辑中,则不使用排名会简单得多:

SELECT `country`, COUNT(*) total
FROM medal
GROUP BY country
ORDER BY total DESC
LIMIT 3
看起来Kibbee也打败了我,但对于保证的
GROUP BY
兼容查询,您可以将上述内容包装在自己的
SELECT
中:

SELECT @n:=@n+1 AS rank, country, total
FROM
  (
    SELECT `country`, COUNT(*) total
    FROM medal
    GROUP BY country
    ORDER BY total DESC
    LIMIT 3
  ) t1,

(SELECT @n:=0) t2

如果您可以在程序逻辑中添加秩,则不使用秩会简单得多:

SELECT `country`, COUNT(*) total
FROM medal
GROUP BY country
ORDER BY total DESC
LIMIT 3
看起来Kibbee也打败了我,但对于保证的
GROUP BY
兼容查询,您可以将上述内容包装在自己的
SELECT
中:

SELECT @n:=@n+1 AS rank, country, total
FROM
  (
    SELECT `country`, COUNT(*) total
    FROM medal
    GROUP BY country
    ORDER BY total DESC
    LIMIT 3
  ) t1,

(SELECT @n:=0) t2
这将生成您描述的汇总表(前三名国家)


这将生成您描述的汇总表(前三名国家)

他在问如何根据结果生成另一个(摘要)表格。小菜一碟-让SQL将结果插入到一个新表中,该表带有一个自动递增字段(位置),他正在询问如何从结果生成另一个(摘要)表。小菜一碟-将SQL插入结果放入具有自动递增字段(位置)的新表中