Subconsultas Usando COUNT em SQL e Seus Exemplos Práticos

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.

Índice

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 NULL

A 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:

  1. Recupera nomes de usuários da tabela users.
  2. Usa uma subconsulta para contar o número de pedidos da tabela orders para o usuário correspondente.
  3. 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     | 3

A 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:

  1. Recupera nomes de usuários da tabela users.
  2. Usa uma subconsulta para contar o número de pedidos da tabela orders para o usuário correspondente, limitado ao período especificado.
  3. 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íodo

A execução da consulta acima gera os seguintes resultados:

user_name   | order_count
------------|-------------
Alice       | 2
Bob         | 1
Charlie     | 3

A 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.

Índice