Почему для того, чтобы посчитать количество повторяющихся значений в поле, можно написать:
SELECT *, COUNT(phone)
FROM registered_phones
GROUP BY phone HAVING COUNT(1)>1;
А для того, чтобы посчитать количество неповторяющихся значений, нужно писать:
SELECT COUNT(*)
FROM (
SELECT DISTINCT phone FROM registered_phones
) t;
и нельзя написать:
SELECT DISTINCT phone, COUNT(phone) FROM registered_phones;
Этот последний запрос возвратит неверное значение. Чем это обусловлено?
UPD:
Также я заметила, что всё-таки вернуть верное количество неповторяющихся значений можно следующим запросом:
SELECT DISTINCT phone, COUNT(DISTINCT phone) FROM registered_phones;
SELECT COUNT(*)
FROM (
SELECT DISTINCT phone FROM registered_phones
) t;
Выбрать phone, отбросить повторяющиеся и подсчитать количество оставшихся
SELECT DISTINCT phone, count(phone) FROM registered_phones;
Для всех записей вывести значения поля phone и количество записей в таблице, где phone IS NOT NULL. Из пар (phone, count) отбросить дубликаты
Потому что группируем по строке и смотрим, сколько раз она встречается
SELECT *, COUNT(phone)
FROM registered_phones
GROUP BY phone
HAVING COUNT(1) > 1
Что мешает для поиска неповторяющихся значений написать так?
SELECT *, COUNT(phone)
FROM registered_phones
GROUP BY phone
HAVING COUNT(1) = 1
Потому что данный запрос сначала сделает подсчёт количества - составит таблицу из phone и count(phone), а потом пройдётся снова и выполнит DISTINCT, то есть удаление всех дубликатов (который будет бесполезен, т.к. мы используем агрегирующие функции и группировку):
SELECT DISTINCT phone, COUNT(phone)
FROM registered_phones
GROUP BY phone;
В этом случае надо использовать удаление дубликатов при подсчёте количества, то есть использовать COUNT(DISTINCT phone)
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники