Jump to content

Criar Instrução SQL entre 2 tabelas


elcandonga
Ir para a Solução Solucionado por Tiago Neves,

Postagens Recomendadas

Oi Gente,
Preciso muito criar uma instrução SQL para fazer um cout(\*) group by entre 2 tabelas, como se fosse assim:
SELECT NOME_CATEGORIA, COUNT( \* )  FROM CATEGORIA, PRODUTO GROUP BY NOME_CATEGORIA

1a Tabela
Tabela de Categorias
Campo1  ID_CATEGORIA
Campo2  NOME_CATEGORIA

2a Tabela
Tabela de Produtos
Campo1  ID_PRODUTO
Campo2  ID_CATEGORIA_PRODUTO
Campo3  NOME_PRODUTO

Preciso de um resultado que liste:

|   NOME_CATEGORIA   |  COUNT(\*) SOMATORIO DE PRODUTOS DE CADA CATEGORIA |
+-------------------------------------------------------------------------+
| INFORMATICA        | 10                                                 |
+-------------------------------------------------------------------------+
| ALIMENTICIOS       | 37                                                 |
+-------------------------------------------------------------------------+
| LIMPEZA            | 23                                                 |
+-------------------------------------------------------------------------+
| ELETRODOMESTICOS   | 17                                                 |
+-------------------------------------------------------------------------+

Agradeço a ajuda

Valeu gente, se alguém puder ajudar

  • Curtir 1
Link to comment
Compartilhe em outros sites

Olá, @elcandonga
Para obter o resultado desejado, você precisa usar uma junção entre as tabelas CATEGORIA e PRODUTO e então agrupar os resultados pela coluna NOME_CATEGORIA e contar o número de produtos em cada categoria. Aqui está a instrução SQL para isso:
 

SELECT 
    c.NOME_CATEGORIA,
    COUNT(p.ID_PRODUTO) AS NUMERO_DE_PRODUTOS
FROM 
    CATEGORIA c
JOIN 
    PRODUTO p ON c.ID_CATEGORIA = p.ID_CATEGORIA_PRODUTO
GROUP BY 
    c.NOME_CATEGORIA;

Essa consulta vai retornar o nome de cada categoria juntamente com a contagem de produtos em cada uma delas. Certifique-se de substituir ID_CATEGORIA e ID_CATEGORIA_PRODUTO pelos nomes reais das colunas em suas tabelas, caso eles sejam diferentes.

  • Ajudou! 1
Link to comment
Compartilhe em outros sites

Tiago, funcionou redondo.

Super Obrigado.

Se não foi abuso perguntar... O resultado era esse mesmo, mas só são exibidas as categorias que tem produtos cadastrados, eu gostaria que as categorias que não tivessem produtos também aparecessem no resultado. Sabe como fazer isso? E também seria possível ordenar do maior para o menor???

Valeu mesmo.

  • Curtir 1
Link to comment
Compartilhe em outros sites

  • Solução

Que bom que funcionou 😃 

Então, para exibir todas as categorias, incluindo aquelas que não têm produtos cadastrados, você pode usar uma junção externa (outer join) entre as tabelas CATEGORIA e PRODUTO. Além disso, para ordenar do maior para o menor, você pode usar a cláusula ORDER BY com a função COUNT(*) e a palavra-chave DESC.

Aqui está a consulta SQL modificada para atender a esses requisitos:
 

SELECT 
    c.NOME_CATEGORIA,
    COUNT(p.ID_PRODUTO) AS NUMERO_DE_PRODUTOS
FROM 
    CATEGORIA c
LEFT JOIN 
    PRODUTO p ON c.ID_CATEGORIA = p.ID_CATEGORIA_PRODUTO
GROUP BY 
    c.NOME_CATEGORIA
ORDER BY 
    COUNT(p.ID_PRODUTO) DESC;

Usar o LEFT JOIN para garantir que todas as linhas da tabela CATEGORIA sejam incluídas, mesmo que não haja correspondência na tabela PRODUTO. Com isso, o COUNT(p.ID_PRODUTO) para contar o número de produtos em cada categoria, incluindo 0 para as categorias que não têm produtos. Utilizamos a cláusula GROUP BY para agrupar os resultados pelo nome da categoria. E por fim, usamos ORDER BY COUNT(p.ID_PRODUTO) DESC para ordenar os resultados do maior para o menor com base no número de produtos.

  • Ajudou! 1
Link to comment
Compartilhe em outros sites

Crie uma conta ou entre para comentar 😀

Você precisa ser um membro para deixar um comentário.

Crie a sua conta

Participe da nossa comunidade, crie sua conta.
É bem rápido!

Criar minha conta agora

Entrar

Você já tem uma conta?
Faça o login agora.

Entrar agora


×
×
  • Create New...