mysql分组取数量_我的mysql如何分组取top10?

mysql 5.7.18

表DDL如下

CREATE TABLE 'roadnet_monitor_flowdata2' (

'id' INT(10) DEFAULT NULL,

'交通类型' VARCHAR(4),

'出站人数' INT(10) DEFAULT NULL,

'日期' date,

'站点' VARCHAR(20),

'纬度' double DEFAULT NULL,

'线路' VARCHAR(8),

'经度' double DEFAULT NULL,

'结束时间' CHAR(8),

'起始时间' CHAR(8),

'进站人数' INT(10) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8

模样如下:

数量大概是500W

现在我被一个需求难住了,选取各个起始时间线路进站人数的top10,也就是说要按起始时间分为72组,每组的线路按进站人数排序,选出72组top10

各种查也没有头绪。。。该怎么办呢?

索引如下:

根据高人指点,我写了一个sql语句

select @ln:=case when @起始时间=起始时间 then @ln+1 else 1 end ln,@起始时间:=起始时间 起始时间,线路,进站总数

from

(select 起始时间,线路,sum(进站人数) as 进站总数

from roadnet_monitor_flowdata2,(select @ln:=0) b

group by 起始时间,线路

order by 起始时间,sum(进站人数) desc) aa

having ln <= 10;

结果是

大家看到,ln不知道怎么回事,中间隔了一个,导致top10变成top6

另一个sql语句

select 起始时间,线路,进站总人数,gn from

(select

@gn:=case when @起始时间=起始时间 then @gn+1 else 1 end gn,@起始时间:=起始时间 起始时间,线路,sum(进站人数) as 进站总人数

from roadnet_monitor_flowdata2 t,(select @gn:=0) b

group by 起始时间,线路 order by 起始时间,进站总人数 desc) aa

where gn<=10 limit 100;

结果是

而这个gn全是1,gn<=10 完全没用,不是top10,而是全排行了。

到底该怎么办?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值