2012-04-12 2 views
0

У меня есть запрос, где я хочу получить 20 самых популярных мест из таблицы, а затем упорядочить их по алфавиту. Мне интересно, есть ли более чистый или более эффективный способ сделать это?mysql order by with limit

SELECT 
    city 
FROM (
    SELECT 
    city, 
    count(*) AS cnt 
    FROM locations 
    GROUP BY city 
    ORDER BY cnt DESC 
    LIMIT 20 
) s ORDER BY city; 
+4

Выглядит неплохо для меня – Phil

+0

Возможно, потому что я не был уверен, был ли это самый эффективный способ, поэтому я хотел спросить ?? – Jeff

+0

@Lion На самом деле, он извлекает неиспользуемое поле. В любом случае, не большое улучшение ... –

ответ

3

Немного чище:

SELECT city FROM (
    SELECT city FROM locations 
    GROUP BY city 
    ORDER BY count(*) DESC 
    LIMIT 20 
) s ORDER BY city 

Вам не нужно, чтобы получить count(*), если вы не собираетесь использовать его.