Города, где число клиентов превышает тысячу

Сгруппируйте клиентов по city и отфильтруйте группы через HAVING COUNT(*) > 1000. WHERE не подходит для условия на результат агрегирования.

Короткий ответ

Что ответить на собеседовании

Сгруппируйте клиентов по city и отфильтруйте группы через HAVING COUNT(*) > 1000. WHERE не подходит для условия на результат агрегирования.

Подробный разбор

Ответ с пояснениями

Условие

В таблице содержится около миллиона записей. Необходимо определить, в каких городах количество клиентов больше 1000, и вывести названия этих городов.

CREATE TABLE customers (
    id INT AUTO_INCREMENT,
    email VARCHAR(256) NOT NULL,
    city VARCHAR(100) NOT NULL
);

Пример данных:

1, a@mail.com, Voronezh  
2, b@mail.com, NY  
3, c@mail.com, Voronezh  
4, d@mail.com, Voronezh  
...

Ответ

Сгруппируйте клиентов по city и отфильтруйте группы через HAVING COUNT(*) > 1000. WHERE не подходит для условия на результат агрегирования.

SELECT city
FROM customers
GROUP BY city
HAVING COUNT(*) > 1000;

Если нужна статистика, добавьте COUNT(*) AS customer_count в SELECT. Индекс по city может помочь, но точный выигрыш проверяют по плану: для точного подсчёта всех групп всё равно требуется обработать множество записей. В приведённом MySQL DDL поле AUTO_INCREMENT должно быть индексировано — обычно id объявляют PRIMARY KEY. Нормализация вариантов названий городов является отдельной задачей.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее