1
resposta

Erro 1055

Olá pessoal, gostaria de compartilhar com vocês o modo como desenvolvi a questão. Inicialmente obtive o ERRO 1055 e depois tive problemas em agrupar. Daí fui testando e desenvolvi da forma descrita abaixo. Não acredito que seja a mais eficiente, mas espero que ajude.

SELECT CONCAT('O cliente ', A.NOME, ' faturou R$ ', A.FATURAMENTO, ' no ano de ', A.ANO) AS SENTENCA_FINAL FROM 
(
    SELECT TC.NOME AS NOME, YEAR(NF.DATA_VENDA) AS ANO, ROUND(SUM(INF.FATURAMENTO), 2) AS FATURAMENTO FROM sucos_vendas.notas_fiscais NF
    INNER JOIN (SELECT CPF, NOME FROM sucos_vendas.tabela_de_clientes) TC ON NF.CPF = TC.CPF
    INNER JOIN (SELECT NUMERO, ROUND(SUM(PRECO * QUANTIDADE), 2) AS FATURAMENTO FROM sucos_vendas.itens_notas_fiscais INF GROUP BY NUMERO) INF ON NF.NUMERO = INF.NUMERO
    WHERE YEAR(NF.DATA_VENDA) = 2016
    GROUP BY TC.NOME, YEAR(NF.DATA_VENDA)
    ORDER BY TC.NOME ASC
) A

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

1 resposta

Olá Jose,

Parece que você encontrou uma maneira de contornar o erro 1055 e conseguiu agrupar os dados de forma eficaz para gerar a saída desejada. O erro 1055 no MySQL geralmente está relacionado ao modo ONLY_FULL_GROUP_BY, que é uma configuração do servidor SQL que exige que todas as colunas selecionadas e que não são agregadas estejam presentes na cláusula GROUP BY.

Sua consulta parece estar correta para o objetivo do exercício, que é gerar uma sentença para cada cliente com o faturamento total no ano de 2016. O uso de subconsultas foi uma boa estratégia para lidar com a agregação e o agrupamento necessário para calcular o faturamento por cliente.

Aqui estão algumas dicas para otimizar sua consulta, caso seja necessário no futuro:

  1. Evite subconsultas desnecessárias: Se a tabela tabela_de_clientes não for muito grande, você poderia fazer o JOIN diretamente sem a necessidade de uma subconsulta.

  2. Use aliases claros: Embora você tenha usado A, TC, NF, e INF como aliases, nomes mais descritivos podem tornar a consulta mais legível para outras pessoas que possam trabalhar com seu código.

  3. Verifique a necessidade do ORDER BY: Se a ordem dos resultados não for importante para o exercício, você pode omitir a cláusula ORDER BY para potencialmente melhorar o desempenho.

  4. Revisar a necessidade do ROUND: Se o arredondamento não for um requisito para a exibição dos valores, você pode removê-lo para simplificar a consulta.

Lembre-se de que a eficiência de uma consulta SQL pode depender muito do contexto, como o tamanho dos dados, os índices disponíveis e a configuração do banco de dados. Portanto, é sempre bom testar diferentes abordagens e verificar o plano de execução da consulta para identificar possíveis gargalos.

Espero ter ajudado e bons estudos!