A consulta SQL abaixo indica o número de produtos de cada lo...
select nome-loja, count (tipo-produto)
from produto
group by nome-loja
Se desejarmos eliminar as duplicações dos produtos, ou seja, cada tipo de produto contará apenas uma vez por loja, antes da função de agregação ser computada, devemos substituir a primeira linha por:
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Alternativa correta: C – select nome-loja, count (distinct tipo-produto)
Para entendermos o motivo pelo qual a alternativa C é a correta, precisamos abordar o conceito de agregação em SQL e o uso da cláusula DISTINCT
. A cláusula GROUP BY
é utilizada em uma consulta SQL para agrupar as linhas que têm os mesmos valores em colunas específicas. Isso é comumente empregado junto com funções de agregação, como COUNT()
, SUM()
, AVG()
, entre outras, para resumir os dados.
Função COUNT(): Esta é uma função de agregação usada para contar o número de linhas que correspondem a um critério específico. Por padrão, o COUNT()
conta todas as linhas, incluindo as duplicatas. No entanto, a nossa consulta deseja contar cada tipo de produto apenas uma vez por loja, mesmo que haja produtos duplicados.
Para realizar a contagem sem duplicatas, utilizamos a palavra-chave DISTINCT
dentro da função COUNT()
. A expressão COUNT(DISTINCT column_name)
conta apenas os valores distintos (não duplicados) para a coluna especificada. Portanto, ao modificarmos a consulta original para:
select nome-loja, count(distinct tipo-produto)
from produto
group by nome-loja
Estamos instruindo o banco de dados a contar os diferentes tipos de produtos (tipo-produto
) para cada loja (nome-loja
), ignorando as repetições de produtos dentro de cada loja. Dessa forma, garantimos que cada tipo de produto seja contabilizado uma única vez por loja na nossa agregação.
As outras alternativas apresentam combinações de palavras-chave e funções que não são válidas ou que não produziriam o resultado desejado. Por exemplo, unique
, only
, exists
não são funções ou cláusulas válidas para serem utilizadas com a função COUNT()
em SQL para o propósito de eliminar duplicatas.
Portanto, a alternativa C é a única que utiliza corretamente a cláusula DISTINCT
com a função COUNT()
para contar os tipos de produtos distintos por loja, de acordo com o enunciado da questão.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
De acordo com [1]:
"Nos casos em que queremos forçar a eliminação de duplicatas, inserimos a palavra-chave distinct após select."
[1] Silberschatz, Sistemas de Bancos de Dados, tradução da 5 edição, página 55.
1) SQL COUNT(*) Syntax
A COUNT(*) função retorna o número de registros em uma tabela.
Exemplo: SELECT COUNT(*) FROM table_name;
2) SQL COUNT(DISTINCT column_name) Syntax
A COUNT(DISTINCT column_name) funcão retorna o número, sem repetição, de valores de uma coluna especifica.
Exemplo: SELECT COUNT(DISTINCT column_name) FROM table_name;
c-
SQL COUNT() function with DISTINCT clause eliminates the repetitive appearance of the same data. The DISTINCT can come only once in a given select statement.
https://www.w3resource.com/sql/aggregate-functions/count-with-distinct.php
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo