MySql 选择每个国家的前 3 个结果
Posted
技术标签:
【中文标题】MySql 选择每个国家的前 3 个结果【英文标题】:MySql select top 3 results from each country 【发布时间】:2013-10-10 08:35:19 【问题描述】:这是我的问题......(非常感谢 mysql 专家的任何建议)
我有一个数据库表指定: 时间(9.99、10.96、11.02 等) 国家(例如 JAM、美国、CAN 等) 日期(例如 2011、2012、2013 等)
我希望显示指定年份 (2012) 的按时间 (ASC) 排序的排名列表
问题 - 我只想在每个国家/地区最多显示三个条目,并且列表必须按时间 (ASC) 排序
我已经尝试过(来自这里的另一个建议):
set @num := 0, @country := '';
select country, time
from (
select country, time,
@num := if(@country = country, @num + 1, 1) as row_number,
@country := country as dummy
from stats
where eventID = 1
order by country
) as x where x.row_number <= 3;
不过,这在一定程度上是可行的 - 但它会按国家/地区(按字母顺序)对列表进行排序。
抱歉,如果这含糊不清..但会喜欢一些想法!!!
非常感谢!
【问题讨论】:
所以订购别的东西!?!?!还在苦苦挣扎?考虑发布适当的 DDL 和/或 sqlfiddle 连同所需的结果 在您的示例中time
是十进制值? 9.99, 10.96, 11.02
这些值是什么意思?我看到您在日期列中保存了年份,但是时间到底包含什么?这是某种组合的月日日值吗?只是好奇
对不起,伙计们,对这个很陌生...这里是 sqlfiddle sqlfiddle.com/#!2/bc5a9/1
【参考方案1】:
试试这个:
SET @n=0,@s=-1;
SELECT
country,
time
FROM (
SELECT
country,
time,
@n:=IF(@s=-1 OR @s=country,@n+1,1) as n,
@s:=country
FROM
stats
ORDER BY
country
) as tmp
WHERE
n <= 3
ORDER BY
time
【讨论】:
谢谢 - 差不多了!我已经设置了这个 sqlfiddle,以便更好地了解我想要达到的目标sqlfiddle.com/#!2/bc5a9/1 按时最快到最慢 - 每个国家/地区不超过三个结果 @GavinLovegrove 很高兴听到它:) 不要忘记接受答案,以便其他人可以看到解决方案以上是关于MySql 选择每个国家的前 3 个结果的主要内容,如果未能解决你的问题,请参考以下文章