Jump to content

Como corrigir erro em consulta SQL com SUM e CASE ao agrupar dados?


Postagens Recomendadas

Gostaria de um auxílio onde está o erro e como solucioná-lo
 

SELECT
    experience AS exp,
    COUNT(*) AS count,
    SUM(
        CASE
            WHEN
                ((sql = 100 OR sql IS NULL) AND
                 (algo = 100 OR algo IS NULL) AND
                 (bug_fixing = 100 OR bug_fixing IS NULL)) AND
                -- Garante que pelo menos uma categoria é não nula e pontua 100
                ((sql = 100 AND sql IS NOT NULL) OR
                 (algo = 100 AND algo IS NOT NULL) OR
                 (bug_fixing = 100 AND bug_fixing IS NOT NULL))
            THEN 1
            ELSE 0
        END
    ) AS max
FROM
    assessments
GROUP BY
    experience
ORDER BY
    experience DESC;

 

Erro

Example test: (First example test.) Returned value:
 

+---+---+---+ 
| 5 | 3 | 2 | 
| 3 | 1 | 0 | 
| 1 | 1 | 1 | 
+---+---+---+

WRONG ANSWER (row 1: got ('5', '3', '2'), expected ('5', '2', '3'))

Example test: (Second example test.) Returned value:

+----+---+---+ 
| 20 | 1 | 0 | 
| 7 | 1 | 1 | 
| 3 | 1 | 0 | 
| 2 | 2 | 0 | 
+----+---+---+

WRONG ANSWER (row 1: got ('20', '1', '0'), expected ('20', '0', '1'))

Your test case:

INSERT INTO assessments VALUES (1, 3, 100, NULL, 50);
INSERT INTO assessments VALUES (2, 5, NULL, 100, 100);
INSERT INTO assessments VALUES (3, 1, 100, 100, 100);
INSERT INTO assessments VALUES (4, 5, 100, 50, NULL);
INSERT INTO assessments VALUES (5, 5, 100, 100, 100);

Returned value:

+---+---+---+ 
| 5 | 3 | 2 | 
| 3 | 1 | 0 | 
| 1 | 1 | 1 | 
+---+---+---+


Detected some errors. NÃO SEI COMO ARRUMAR O CODIGO 

  • Curtir 1
Link to comment
Compartilhe em outros sites

  • Casa do Desenvolvedor mudou o título para Como corrigir erro em consulta SQL com SUM e CASE ao agrupar dados?
SELECT
    experience AS exp,
    COUNT(*) AS count,
    MAX(
        CASE
            WHEN
                ((sql = 100 OR sql IS NULL) AND
                 (algo = 100 OR algo IS NULL) AND
                 (bug_fixing = 100 OR bug_fixing IS NULL)) AND
                -- Garante que pelo menos uma categoria é não nula e pontua 100
                ((sql = 100 AND sql IS NOT NULL) OR
                 (algo = 100 AND algo IS NOT NULL) OR
                 (bug_fixing = 100 AND bug_fixing IS NOT NULL))
            THEN 1
            ELSE 0
        END
    ) AS max
FROM
    assessments
GROUP BY
    experience
ORDER BY
    experience DESC;

O problema na sua consulta SQL está na ordenação dos resultados por "max".

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...