Почему для того, чтобы посчитать количество повторяющихся значений в поле, можно написать:
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)
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Здравствуйте! Помогите пожалуйста разобраться Есть таблица со колонкой price (тип int) в ней записи 50, 75, 100
Добрый день! Возникла необходимость отловить неправильно введённые url\port\login\password для подключения к БД и выводить соответствующие сообщения...