Устанавливаем уникальность значения

Задача
Вы хотите знать, уникальны ли значения таблицы.

Решение
Используйте инструкцию HAVING в сочетании с функцией COUNT().

Обсуждение
Вы можете использовать инструкцию HAVING для нахождения уникальных значений в тех случаях, где ключевое слово DISTINCT неприменимо. DISTINCT удаляет дубликаты, но не сообщает о том, какие значения повторялись в исходном множестве. HAVING же может указать, какие значения уникальны, а какие – нет.

Следующий запрос выводит дни, в которые работал только один водитель, и дни, в которые работало несколько водителей. HAVING и COUNT() используются для определения того, являются ли значения trav_date уникальными:

mysql> SELECT trav_date, COUNT(trav_date)
-> FROM driver_log
-> GROUP BY trav_date
-> HAVING COUNT(trav_date) = 1;

+--------------+-----------------------+
| trav_date | COUNT(trav_date) |
+--------------+-----------------------+
| 2001-11-26 | 1 |
| 2001-11-27 | 1 |
| 2001-12-01 | 1 |
+--------------+-----------------------+

mysql> SELECT trav_date, COUNT(trav_date)
-> FROM driver_log
-> GROUP BY trav_date
-> HAVING COUNT(trav_date) > 1;

+--------------+-----------------------+
| trav_date | COUNT(trav_date) |
+--------------+-----------------------+
| 2001-11-29 | 3 |
| 2001-11-30 | 2 |
| 2001-12-02 | 2 |
+--------------+-----------------------+

Такой прием можно применять и к комбинациям значений.


Например, чтобы найти количество пар отправитель-получатель (srcuser-dstuser), которые обменялись всего одним письмом, будем искать комбинации, встречающиеся в таблице mail только один раз:

mysql> SELECT srcuser, dstuser
-> FROM mail
-> GROUP BY srcuser, dstuser
-> HAVING COUNT(*) = 1;

+---------+---------+
| srcuser | dstuser |
+---------+---------+
| barb | barb |
| gene | tricia |
| phil | barb |
| tricia | gene |
| tricia | phil |
+---------+---------+

Обратите внимание, что запрос не выводит счетчик, как это делали предыдущие запросы с целью показать правильность подсчета. Вы можете использовать счетчик в инструкции HAVING, не включая его в список столбцов вывода.

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела MySQL на эту тему:
Выбор групп только с определенными характеристиками
Группирование по результатам выражения
Использование ключевого слова DISTINCT для удаления дубликатов
Итоги и значения NULL
Итоги по датам

Вернуться в раздел: MySQL / 7. Формирование итогов