如图,这是我的表
需求:
查出所有city中最大的times_rank
脚本:
create table day_video_city_access_topn_stat (
day varchar(8) not null,
cms_id bigint(10) not null,
city varchar(20) not null,
times bigint(10) not null,
times_rank int not null,
primary key (day, cms_id, city)
);
想了半天最后只能做成这样
这是sql语句
select cms_id,city,times_rank from `day_video_city_access_topn_stat`
group by city,times_rank,cms_id
order by city,`times_rank` desc
需要怎么写才能只要每个省份的最大times_rank?
用max(times_rank)试下,即:
select cms_id,city,max(times_rank) from `day_video_city_access_topn_stat`
group by city,cms_id
order by city,`times_rank` desc
试一下这样写的结果是不是你想要的
SELECT cms_id,city,times_rank,max(times_rank) as max_times_rank
FROM `day_video_city_access_topn_stat`
group by city;
用嵌套语句吧,
select cms_id,city,times_rank from day_video_city_access_topn_stat
where times_rank = {select max(times_rank) from day_video_city_access_topn_stat
}
好像是这样写的,具体的可以去查一下,先把最大的值筛选出来,然后加个条件判断,如果 times_rank 等于最大值,那么输出。可以用嵌套的
5.7之前可以通过先排序后分组。5.7开始分组了mysql 会优化之前的排序,所以需要先select一个临时表出来已经排序的,再分组