Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

[Dúvida] Resultados Diferentes

Qual o motivo de estar dando resultados diferentes ao trocar o tipo de aspa em Ano/Mes?

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta

Olá, William! Tudo bem?

O comportamento que você está observando no SQLiteOnline tem a ver com a forma como o banco de dados interpreta aspas simples e aspas duplas. Essa diferença aparentemente pequena muda completamente a lógica de agrupamento e ordenação da sua consulta, e entender esse detalhe vai te ajudar muito no dia a dia com SQL.

Então abaixo deixo as diferenças:

1. Com Aspas Simples ('Ano/Mes')

No padrão SQL, aspas simples são usadas exclusivamente para strings, ou seja, textos literais.

Ao utilizar 'Ano/Mes' no GROUP BY e no ORDER BY, o SQLite não entende que você está se referindo à coluna criada no SELECT. Ele interpreta que você quer agrupar e ordenar por um texto fixo, a palavra "Ano/Mes".

O comportamento: agrupar por um texto fixo faz com que o banco ignore o ano real da venda (2020, 2021, 2022) na hora de juntar os registros. Ele acaba agrupando apenas por Nome_Fornecedor, somando os dados de todos os anos como se fossem uma única coisa.

O resultado: os valores de Qtd_Vendas ficam muito mais altos (por exemplo, AstroSupply com 4131) porque estão somando o acumulado de vários anos. Na exibição da tabela, o SQLite escolhe um dos anos de forma arbitrária para mostrar na coluna.

2. Com Aspas Duplas ("Ano/Mes")

No padrão SQL, aspas duplas são usadas para identificadores, como nomes de tabelas ou nomes de colunas. Ao mudar para "Ano/Mes", o SQLite finalmente entende que você está fazendo referência ao alias da coluna definida na linha 7.

O comportamento: o banco agora agrupa os dados combinando o Nome_Fornecedor e o valor real retornado por strftime('%Y/%m', v.data_venda).

O resultado: os dados são separados corretamente por ano e mês. Como a consulta possui um filtro para o mês 11, a listagem mostra as vendas específicas de novembro de 2022 separadas de novembro de 2021. Por isso, os números diminuem e exibem o valor real de cada período.

Deu para entender a diferença?

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!