MYSql的Muliple Order

时间:2016-06-07 03:56:59

标签: mysql sql-order-by

我在我的桌子上有商店记录,我想根据商店的最高评级和距我所在地最近的距离对它们进行排序。

    SELECT rating,
    ( 3959 * acos( cos( radians(37) ) 
                   * cos( radians( lat ) ) 
                   * cos( radians( lon ) 
                       - radians(-122) ) 
                   + sin( radians(37) ) 
                   * sin( radians( lat ) ) 
                 )
   ) AS distance 

FROM mystores sr



order by sr.rating desc ,distance asc 

它没有给我我想要的结果

表Mystores

id|rating|distance
66  5        55
55  4        56
99  3        60 

1 个答案:

答案 0 :(得分:0)

我假设您只想要最近的商店,并且您希望忽略具有相同等级但距离更远的所有其他商店。 通过raiting的小组允许我们获得每次raiting的最小距离。

 select m1.* 
 from mystores  m1
 join (
      select m.raiting, 
        min(m.distance) distance 
      from mystores m
      group by m.raiting  
     ) m2
  on m2.raiting = m1.raiting   and
     m2.distance = m1.distance
  order by m1.raiting desc, m1.distance asc