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