A função COUNT no SQL é uma função básica usada para agregar o número de registros em um banco de dados. Esta função é muito útil para contar registros com base em condições específicas ou agregando por grupo. Neste artigo, detalharemos como executar consultas de banco de dados mais avançadas combinando a função COUNT e subconsultas. Incorporando exemplos práticos, aprenderemos a agregar e analisar dados de forma eficiente.
O que é a Função COUNT?
A função COUNT é uma função agregada no SQL que conta o número de colunas especificadas ou todos os registros. Por exemplo, é usada para contar o número de registros em uma tabela específica ou o número de registros que atendem a certas condições.
Uso Básico
A função COUNT pode ser usada em uma tabela inteira ou em uma coluna específica. A sintaxe básica é a seguinte:
SELECT COUNT(*) FROM table_name;Ou, para contar uma coluna específica:
SELECT COUNT(column_name) FROM table_name;Tratamento de Valores NULL
Quando um nome de coluna é especificado, a função COUNT exclui valores NULL. Por outro lado, usar COUNT(*) conta todos os registros, incluindo aqueles com valores NULL. Aqui está um exemplo:
SELECT COUNT(column_name) FROM table_name;  -- Conta excluindo NULL
SELECT COUNT(*) FROM table_name;             -- Conta todos os registros, incluindo NULLA função COUNT é uma ferramenta essencial para agregação e análise básica em um banco de dados. A seguir, vamos examinar as subconsultas.
Noções Básicas de Subconsultas
Uma subconsulta refere-se a uma consulta contida dentro de outra consulta SQL. As subconsultas são frequentemente usadas como condições na consulta principal, simplificando a expressão de manipulações complexas de dados.
Sintaxe Básica das Subconsultas
As subconsultas podem ser usadas em vários lugares, como na instrução SELECT, cláusula WHERE, cláusula FROM, etc. A sintaxe básica é a seguinte:
SELECT column_name
FROM table_name
WHERE column_name IN (SELECT column_name FROM another_table WHERE condition);Nesta sintaxe, a subconsulta é usada como uma condição na cláusula WHERE.
Tipos de Subconsultas
Existem principalmente dois tipos de subconsultas:
Subconsultas Escalares
Subconsultas escalares retornam um único valor (valor escalar). Elas são usadas na instrução SELECT ou como uma condição na cláusula WHERE. Exemplo:
SELECT column_name,
       (SELECT COUNT(*) FROM another_table WHERE condition) AS alias
FROM table_name;Subconsultas de Múltiplos Valores
Subconsultas de múltiplos valores retornam múltiplos valores (linhas). Elas são usadas com condições como IN ou EXISTS. Exemplo:
SELECT column_name
FROM table_name
WHERE column_name IN (SELECT column_name FROM another_table WHERE condition);Usando subconsultas, consultas complexas podem ser descritas de forma mais concisa. A seguir, vejamos exemplos específicos de subconsultas usando a função COUNT.
Exemplos de Subconsultas Usando COUNT
Usando a função COUNT como uma subconsulta, você pode agregar dados com base em condições específicas. Aqui, explicaremos como implementar subconsultas usando COUNT com exemplos reais de consultas SQL.
Exemplo 1: Contando o Número de Produtos em Cada Categoria
Por exemplo, se você tiver uma tabela de produtos e uma tabela de categorias, a consulta para contar o número de produtos em cada categoria é a seguinte:
SELECT category_name,
       (SELECT COUNT(*)
        FROM products
        WHERE products.category_id = categories.category_id) AS product_count
FROM categories;Nesta consulta, para cada categoria, a subconsulta conta o número de produtos pertencentes a essa categoria.
Exemplo 2: Recuperando o Número de Vendas para a Loja com Maior Número de Vendas
Em seguida, mostraremos um exemplo de contar o número de vendas para cada loja e recuperar a loja com o maior número de vendas:
SELECT store_id, sales_count
FROM (SELECT store_id,
             COUNT(*) AS sales_count
      FROM sales
      GROUP BY store_id) AS store_sales
ORDER BY sales_count DESC
LIMIT 1;Nesta consulta, a subconsulta primeiro conta o número de vendas para cada loja. A consulta principal então ordena os resultados pelo número de vendas em ordem decrescente e recupera a loja principal.
Exemplo 3: Contando o Número de Usuários que Atendem a Condições Específicas
Por último, mostraremos um exemplo de contagem do número de usuários que atendem a condições específicas (por exemplo, usuários que fizeram pedidos dentro de um determinado período):
SELECT COUNT(*)
FROM (SELECT user_id
      FROM orders
      WHERE order_date BETWEEN '2023-01-01' AND '2023-12-31'
      GROUP BY user_id) AS yearly_orders;Nesta consulta, a subconsulta agrupa usuários que fizeram pedidos dentro de um período específico, e a consulta principal conta esse número.
Como você pode ver nesses exemplos, usar subconsultas com COUNT permite a agregação eficiente de dados complexos. A seguir, vejamos exemplos práticos de contagem do número de pedidos por usuário.
Exemplo Prático: Contando o Número de Pedidos por Usuário
Como um exemplo prático para negócios, apresentaremos como contar o número de pedidos por usuário. Neste exemplo, usaremos a tabela users e a tabela orders para contar o número de pedidos que cada usuário fez.
Estrutura da Tabela
Primeiro, a estrutura da tabela users e da tabela orders é a seguinte:
-- users table
CREATE TABLE users (
    user_id INT PRIMARY KEY,
    user_name VARCHAR(255)
);
-- orders table
CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    user_id INT,
    order_date DATE,
    FOREIGN KEY (user_id) REFERENCES users(user_id)
);Consulta para Contar o Número de Pedidos por Usuário
A consulta para contar o número de pedidos por usuário é a seguinte:
SELECT user_name,
       (SELECT COUNT(*)
        FROM orders
        WHERE orders.user_id = users.user_id) AS order_count
FROM users;Esta consulta realiza as seguintes operações:
- Recupera nomes de usuários da tabela 
users. - Usa uma subconsulta para contar o número de pedidos da tabela 
orderspara o usuário correspondente. - Exibe o resultado como 
order_count. 
Exemplo de Resultados de Execução
Por exemplo, suponha os seguintes dados na tabela users e os dados de pedidos na tabela orders:
-- Dados na tabela users
INSERT INTO users (user_id, user_name) VALUES
(1, 'Alice'),
(2, 'Bob'),
(3, 'Charlie');
-- Dados na tabela orders
INSERT INTO orders (order_id, user_id, order_date) VALUES
(1, 1, '2023-01-01'),
(2, 1, '2023-02-15'),
(3, 2, '2023-03-10'),
(4, 3, '2023-04-20'),
(5, 3, '2023-05-25'),
(6, 3, '2023-06-30');A execução da consulta acima gera os seguintes resultados:
user_name   | order_count
------------|-------------
Alice       | 2
Bob         | 1
Charlie     | 3A partir deste resultado, podemos ver que Alice fez 2 pedidos, Bob fez 1 pedido e Charlie fez 3 pedidos.
Utilizando subconsultas com COUNT desta maneira, você pode facilmente agregar contagens detalhadas de pedidos por usuário. A seguir, vejamos métodos para agregar dados com base em condições específicas.
Exemplo Prático: Agregação com Base em Condições Específicas
A seguir, apresentaremos um método para agregar dados com base em condições específicas. Aqui, mostraremos um exemplo de agregação do número de pedidos feitos dentro de um período específico.
Consulta para Contar o Número de Pedidos em um Período
A consulta para contar o número de pedidos feitos dentro de um período específico é a seguinte:
SELECT user_name,
       (SELECT COUNT(*)
        FROM orders
        WHERE orders.user_id = users.user_id
        AND order_date BETWEEN '2023-01-01' AND '2023-12-31') AS order_count
FROM users;Esta consulta realiza as seguintes operações:
- Recupera nomes de usuários da tabela 
users. - Usa uma subconsulta para contar o número de pedidos da tabela 
orderspara o usuário correspondente, limitado ao período especificado. - Exibe o resultado como 
order_count. 
Exemplo de Resultados de Execução
Por exemplo, suponha os seguintes dados na tabela users e na tabela orders:
-- Dados na tabela users
INSERT INTO users (user_id, user_name) VALUES
(1, 'Alice'),
(2, 'Bob'),
(3, 'Charlie');
-- Dados na tabela orders
INSERT INTO orders (order_id, user_id, order_date) VALUES
(1, 1, '2023-01-01'),
(2, 1, '2023-02-15'),
(3, 2, '2023-03-10'),
(4, 3, '2023-04-20'),
(5, 3, '2023-05-25'),
(6, 3, '2023-06-30'),
(7, 1, '2022-12-31');  -- Pedido fora do períodoA execução da consulta acima gera os seguintes resultados:
user_name   | order_count
------------|-------------
Alice       | 2
Bob         | 1
Charlie     | 3A partir deste resultado, podemos ver que Alice fez 2 pedidos dentro de 2023, Bob fez 1 pedido e Charlie fez 3 pedidos.
Outros Exemplos de Utilização de Agregação Condicional
Por exemplo, se você quiser contar o número de pedidos para um produto específico, pode adicionar outras condições:
SELECT product_name,
       (SELECT COUNT(*)
        FROM orders
        WHERE orders.product_id = products.product_id
        AND order_date BETWEEN '2023-01-01' AND '2023-12-31') AS order_count
FROM products;Nesta consulta, para cada produto na tabela products, o número de pedidos feitos dentro de um período específico é contado.
Usando subconsultas com COUNT dessa maneira, é possível realizar agregações flexíveis de dados com base em condições específicas. Isso permite a obtenção eficiente de informações úteis para a tomada de decisões empresariais e análise de dados. A seguir, vamos para o resumo deste artigo.
Resumo
Subconsultas usando a função COUNT são uma ferramenta poderosa no SQL. Utilizá-las permite a execução eficiente de agregações e análises de dados complexos. Especificamente, você pode escrever facilmente consultas úteis no negócio real, como contar o número de pedidos por usuário ou agregar com base em condições específicas.
Entendendo e utilizando adequadamente as subconsultas, você pode maximizar as informações mantidas pelo banco de dados. Isso permite uma análise de dados precisa e detalhada para apoiar a tomada de decisões empresariais.
No futuro, tente desafiar consultas mais complexas e combinar com outras funções agregadas para um processamento de dados mais avançado. Ao aprimorar suas habilidades em SQL, você pode melhorar muito a eficiência da gestão e análise de bancos de dados.
Isso conclui a explicação e exemplos práticos de subconsultas usando COUNT em SQL. Esperamos que este artigo ajude você em suas operações de banco de dados.

