MySQL CONTAGEM DISTINTA

Resumo : neste tutorial, você aprenderá como usar a COUNT DISTINCTfunção MySQL para contar o número de valores únicos em uma coluna específica de uma tabela.

Introdução à função MySQL COUNT DISTINCT

O COUNT DISTINCTpermite contar o número de valores exclusivos em uma coluna específica de uma tabela.

Aqui está a sintaxe básica para usar a COUNT DISTINCTfunção:

SELECT COUNT(DISTINCT column_name)
FROM table_name;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Nesta sintaxe:

  • COUNT DISTINCT: A função para contar valores únicos.
  • column_name: o nome da coluna para a qual você deseja contar valores distintos.
  • table_name: o nome da tabela que contém o arquivo column_name.

Na prática, você usa COUNT DISTINCTquando deseja descobrir quantos valores únicos estão presentes em uma coluna.

Exemplos de MySQL COUNT DISTINCT

Vejamos alguns exemplos de uso da COUNT DISTINCTfunção. Usaremos a employeestabela do banco de dados de exemplo para a demonstração:

MySQL COUNT DISTINCT - tabela de funcionários

A consulta a seguir recupera nome, sobrenome e cargo da employeestabela:

SELECT firstName, lastName, jobTitle 
FROM employees;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

+-----------+-----------+----------------------+
| firstName | lastName  | jobTitle             |
+-----------+-----------+----------------------+
| Diane     | Murphy    | President            |
| Mary      | Patterson | VP Sales             |
| Jeff      | Firrelli  | VP Marketing         |
| William   | Patterson | Sales Manager (APAC) |
| Gerard    | Bondur    | Sale Manager (EMEA)  |
| Anthony   | Bow       | Sales Manager (NA)   |
| Leslie    | Jennings  | Sales Rep            |
| Leslie    | Thompson  | Sales Rep            |
| Julie     | Firrelli  | Sales Rep            |
| Steve     | Patterson | Sales Rep            |
| Foon Yue  | Tseng     | Sales Rep            |
| George    | Vanauf    | Sales Rep            |
| Loui      | Bondur    | Sales Rep            |
| Gerard    | Hernandez | Sales Rep            |
| Pamela    | Castillo  | Sales Rep            |
| Larry     | Bott      | Sales Rep            |
| Barry     | Jones     | Sales Rep            |
| Andy      | Fixter    | Sales Rep            |
| Peter     | Marsh     | Sales Rep            |
| Tom       | King      | Sales Rep            |
| Mami      | Nishi     | Sales Rep            |
| Yoshimi   | Kato      | Sales Rep            |
| Martin    | Gerard    | Sales Rep            |
+-----------+-----------+----------------------+
23 rows in set (0.00 sec)Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

A saída indica que a employeestabela possui 23 linhas.

1) Usando COUNT DISTINCT para obter o número de cargos exclusivos

O exemplo a seguir usa a COUNT DISTINCTfunção para obter o número exclusivo de cargos da jobTitlecoluna da employeestabela:

SELECT
  COUNT(DISTINCT jobTitle) 
from 
  employees;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Nesta consulta:

  • COUNT( DISTINCT jobTitle): conta o número de valores distintos na jobTitlecoluna.
  • FROM employees: especifica a tabela da qual os dados serão recuperados.

Ao executar a consulta, o MySQL retornará a seguinte saída:

+--------------------------+
| count(distinct jobTitle) |
+--------------------------+
|                        7 |
+--------------------------+Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Você pode usar um alias de coluna para atribuir um nome mais significativo à coluna de saída da seguinte maneira:

SELECT
  COUNT(DISTINCT jobTitle) uniqueJobTitleCount
from 
  employees;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

+---------------------+
| uniqueJobTitleCount |
+---------------------+
|                   7 |
+---------------------+
1 row in set (0.00 sec)Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

2) Usando COUNT DISTINCT para obter o número de nomes exclusivos

O exemplo a seguir usa COUNT DISTINCTpara obter o número de nomes exclusivos de funcionários:

SELECT
  COUNT(DISTINCT firstName) uniqueFirstNameCount
from 
  employees;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

+----------------------+
| uniqueFirstNameCount |
+----------------------+
|                   21 |
+----------------------+
1 row in set (0.00 sec)Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

CONTAGEM DISTINTA e NULA

No MySQL, a COUNT DISTINCTfunção não conta valores NULL. Ele conta apenas valores exclusivos e não nulos na coluna especificada. Em outras palavras, se uma coluna tiver valores nulos, a COUNT DISTINCTfunção irá ignorar os valores NULL da contagem.

Vamos dar uma olhada no exemplo a seguir.

Primeiro, crie uma nova tabela contacts que tenha duas colunas ide name:

CREATE TABLE contacts(
   id INT AUTO_INCREMENT,
   name VARCHAR(50),
   PRIMARY KEY(id)
);

Segundo, insira quatro linhas na contactstabela:

INSERT INTO contacts(name)
VALUES ("John"), ("Jane"),(NULL), ("Jane");Linguagem de código:  PHP  ( php )

Terceiro, selecione os dados da contactstabela:

SELECT * FROM contacts;

Saída:

+----+------+
| id | name |
+----+------+
|  1 | John |
|  2 | Jane |
|  3 | NULL |
|  4 | Jane |
+----+------+
4 rows in set (0.00 sec)Linguagem de código:  JavaScript  ( javascript )

Finalmente, conte o número de nomes exclusivos na namecoluna da contactstabela:

SELECT COUNT(DISTINCT name)
FROM contacts;

Saída:

+----------------------+
| COUNT(DISTINCT name) |
+----------------------+
|                    2 |
+----------------------+
1 row in set (0.00 sec)Linguagem de código:  JavaScript  ( javascript )

Neste exemplo, a COUNT DISTINCTfunção ignora o valor NULL e conta apenas valores exclusivos não nulos.

Resumo

  • Use COUNT DISTINCTa função MySQL para contar o número de valores exclusivos em uma coluna de uma tabela.
  • A COUNT DISTINCTfunção ignora valores NULL da contagem.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *