Сгруппируйте клиентов по 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. Нормализация вариантов названий городов является отдельной задачей.