Избыточность данных возникает по множеству причин. Некоторые из сложных задач, с которыми вы должны справиться при работе с системами баз данных, — это попытка обнаружить повторяющиеся значения. Для этого мы будем использовать агрегатный метод COUNT(). Метод COUNT() возвращает сумму строк, находящихся в определенной таблице. Функция COUNT() позволяет суммировать все строки или только строки, соответствующие заданному условию. В этом руководстве вы узнаете, как определять повторяющиеся значения для одного или нескольких столбцов MySQL с помощью COUNT(). Метод COUNT() имеет три типа:
Убедитесь, что в вашей системе установлен MySQL. Откройте клиентскую оболочку командной строки MySQL и введите свой пароль, чтобы продолжить. Мы рассмотрим несколько примеров подсчета совпадающих значений с помощью метода COUNT().
У нас есть таблица «social» в нашей схеме «data». Проверим его запись с помощью следующего запроса.
>> SELECT * FROM data.social;
Метод COUNT(*) используется для подсчета количества строк, находящихся в таблице, или подсчета количества строк в соответствии с заданным условием. Чтобы проверить общее количество строк в таблице, «social» попробуйте запрос ниже.
>> SELECT COUNT(*) FROM data.social;
Взгляните на метод COUNT(*) при определении некоторых условий. Нам нужно получить количество строк, в которых имя пользователя совпадает с «AndreyEx».
>> SELECT COUNT(*) FROM data.social WHERE User = ‘AndreyEx’;
Чтобы получить общую сумму строк, в которых веб-сайт пользователя — «Instagram», попробуйте запрос, указанный ниже.
>> SELECT COUNT(*) FROM data.social WHERE Website = ‘Instagram’;
Чтобы получить общее количество строк, в которых «Возраст» больше 18, выполните следующие действия:
>> SELECT COUNT(*) FROM data.social WHERE Age > 18;
Давайте возьмем данные столбцов «User» и «Website» из таблицы, где имя пользователя начинается с буквы «M». Попробуйте приведенную ниже инструкцию по оболочке.
>> SELECT User, Website FROM data.social WHERE User like ‘M%’;
В MySQL метод COUNT (выражение) используется только тогда, когда вы хотите подсчитать ненулевые значения столбца «выражение». «Выражение» будет именем любого столбца. Давайте рассмотрим простой пример. Мы подсчитывали только ненулевые значения столбца «Веб-сайт», который связан со столбцом «Age», имеющим значение, равное «25».
>> SELECT COUNT(Website) FROM data.social WHERE Age = 25;
В MySQL метод COUNT(DISTINCT выражение) используется для суммирования ненулевых значений и различных значений столбца «выражение». Чтобы подсчитать определенное количество ненулевых значений в столбце «Age», мы использовали следующий запрос.
>> SELECT COUNT(DISTINCT Age) FROM data.social;
Для большего акцента вы должны объединить COUNT() с функциями управления потоком. Для начала, для части выражения, используемого в методе COUNT(), вы можете использовать функцию IF(). Это может быть очень полезно для быстрой разбивки информации в базе данных. Мы будем подсчитывать количество строк с разными возрастными условиями и разделять их на три разных столбца, которые можно назвать категориями. Во-первых, COUNT(IF) будет подсчитывать строки, возраст которых меньше 20, и сохранять это количество в новом столбце с именем «Teenage». Второй COUNT(IF) подсчитывает строки с возрастом от 20 до 30, сохраняя его в столбце «Young». В-третьих, последний подсчитывает строки старше 30 лет и сохраняет их в столбце «Mature».
>> SELECT COUNT(IF(Age < 20,1,NULL)) ‘Teenage’, COUNT(IF(Age BETWEEN 20 AND 30,1,NULL)) ‘Young’, COUNT(IF(Age > 30,1,NULL)) ‘Mature’ FROM data.social;
Оператор GROUP BY — это инструкция SQL, которая используется для группировки строк с одинаковыми значениями. Он возвращает общее количество значений, находящихся в каждой группе. Например, если вы хотите проверить номер каждого пользователя отдельно, вы должны определить столбец «User» с помощью предложения GROUP BY, подсчитывая записи для каждого пользователя с помощью COUNT(*).
>> SELECT User, COUNT(*) FROM data.social GROUP BY User;
Вы можете выбрать более двух столбцов при выполнении подсчета строк вместе с предложением GROUP BY, как показано ниже.
>> SELECT User, Age, Website, COUNT(*) FROM data.social GROUP BY Website;
Если мы хотим подсчитать строки при использовании предложения WHERE с некоторыми условиями в нем наряду с GROUP BY и COUNT(*), вы также можете это сделать. Приведенный ниже запрос будет извлекать и подсчитывать записи столбцов: «User», «Website» и «Age», где значение веб-сайта — только «Instagram» и «Snapchat». Как видите, у нас есть только 1 запись для обоих веб-сайтов для разных пользователей.
>> SELECT User, Website, Age, COUNT(*) FROM data.social WHERE Website = ‘Instagram’ Or Website = ‘Snapchat’ GROUP BY Website, Age;
Давайте попробуем предложения GROUP BY и ORDER BY совместно с методом COUNT(). Давайте возьмем и посчитаем строки таблицы social, упорядочивая данные в порядке убывания с помощью этого запроса:
>> SELECT User, Website, Age, COUNT(*) FROM data.social GROUP BY Age ORDER BY COUNT(*) DESC;
Приведенный ниже запрос сначала подсчитает строки, а затем отобразит только записи, имеющие COUNT больше 2 в порядке возрастания.
>> SELECT User, Age, COUNT(*) FROM data.social GROUP BY Age HAVING COUNT(*) > 2 ORDER BY COUNT(*) ASC;
Мы рассмотрели все возможные методы для подсчета совпадающих или повторяющихся записей, используя метод COUNT() с различными другими предложениями.