1
resposta

Exisite alguma desvantagem no meu código se comparado ao do exercicío?

Exisite alguma desvantagem no meu código se comparado ao do exercicío?

SELECT AUX.NOME, AUX.CPF, AUX.ANO_MES, AUX.QUANTIDADE_MES, AUX.COMPRA_MAXIMA_MES
    , CASE 
            WHEN AUX.QUANTIDADE_MES > AUX.COMPRA_MAXIMA_MES  THEN 'COMPRA INVÁLIDA'
            WHEN AUX.QUANTIDADE_MES < AUX.COMPRA_MAXIMA_MES  THEN 'COMPRA VÁLIDA'
     END AS STATUS_CLIENTE

 FROM 

    (SELECT 
        TC.NOME
        ,TC.CPF 
        ,SUBSTRING(CONVERT(VARCHAR,NF.DATA),1,7) AS ANO_MES
        ,SUM(INF.QUANTIDADE) AS QUANTIDADE_MES
        ,TC.[VOLUME DE COMPRA] AS COMPRA_MAXIMA_MES

        FROM [TABELA DE CLIENTES] TC
        INNER JOIN [NOTAS FISCAIS] NF ON NF.CPF = TC.CPF
        INNER JOIN [ITENS NOTAS FISCAIS] INF ON INF.NUMERO = NF.NUMERO

        GROUP BY
            TC.NOME
            , TC.CPF 
            ,SUBSTRING(CONVERT(VARCHAR,NF.DATA),1,7)
            ,TC.[VOLUME DE COMPRA]) AS AUX
        ORDER BY AUX.NOME, AUX.ANO_MES
1 resposta

Olá Robert!

Na verdade não. Seu código está funcionando com os mesmos elementos, apenas com uma lógica diferente.

Muitos join podem atrapalhar o desempenho, mas você usa dois também, mas no fim das contas isso só poderia ser percebido com um volume gigantesco de consultas por segundo :)

Para mais dicas sobre performance com o SQL Server, tem um artigo sobre desempenho com sql que esclarece alguns pontos sobre o assunto.

Bons estudos!