Как ограничить результаты запроса MySQL top 3

#mysql

#mysql

Вопрос:

Я пытаюсь заставить этот запрос к базе данных возвращать только 3 наиболее распространенных состояния, но почему-то я продолжаю возвращать все состояния, перечисленные в порядке убывания. Не уверен, где я ошибаюсь …?

 SELECT state, COUNT(*) as count
FROM Contact
GROUP BY state
HAVING state NOT IN(' ')
ORDER BY COUNT(*) DESC
LIMIT 3
  

Комментарии:

1. запрос выглядит хорошо, не могли бы вы предоставить некоторые примеры данных, если это возможно на sqlfiddle.com

2. Похоже, ваш запрос действительно работает нормально ~ sqlfiddle.com /#!2/8fc57/2

3. @user1218172 Ваш запрос работает нормально. Почему это не работает для вас?

Ответ №1:

Я не думаю, что вы используете HAVING правильно.

Я бы просто использовал этот запрос

 SELECT state, COUNT(1) AS state_count
FROM Contact
WHERE state <> ' '
GROUP BY state
ORDER BY state_count DESC
LIMIT 3
  

Демо ~http://sqlfiddle.com /#!2/8fc57/1

Комментарии:

1. @user1218172 Я не совсем уверен, почему ваш исходный запрос не работал. В демо-версии, которую я связал, все выглядит нормально