sql语句根据某列值怎么去重?

如图,这是我的表
需求:
查出所有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一个临时表出来已经排序的,再分组