Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

351
Visualizações
Calcule la suma de una consulta que usa order by y limit Postgres

La siguiente consulta devuelve una tabla de calificaciones. Quiero la suma de la misma y no puedo averiguar cómo hacerlo.

 SELECT grade FROM "GradesTable" WHERE status='success' AND student_ID=1 ORDER BY grade DESC LIMIT 50

me sale este error:

ERROR: la columna "calificación" debe aparecer en la cláusula GROUP BY o usarse en una función agregada

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

SELECT SUM(grades) FROM ( SELECT grade as grades FROM "GradesTable" WHERE status='success' AND student_ID=1 ORDER BY grade DESC LIMIT 50 ) z
over 4 years ago · Santiago Trujillo Relatório

0

El problema aquí es la cláusula ORDER BY que sabría si pegara el error completo, en lugar de obligarnos a recrear su problema desde cero porque no proporcionó el DDL y los datos.

 CREATE TABLE "GradesTable" ( status text, student_id int, grade int ); INSERT INTO "GradesTable" (status, student_id, grade) VALUES ('success', 1, 80), ('success', 1, 100);

Consulta

 SELECT sum(grade) FROM "GradesTable" WHERE status='success' AND student_ID=1 ORDER BY grade DESC LIMIT 50 ; ERROR: column "GradesTable.grade" must appear in the GROUP BY clause or be used in an aggregate function LINE 4: ORDER BY grade DESC

Sin embargo, esto funciona,

 SELECT sum(grade) FROM "GradesTable" WHERE status='success' AND student_ID=1 LIMIT 50 ; sum ----- 180 (1 row)

Pero no debería tener un LIMIT si solo tiene un agregado que solo puede devolver una fila.

 SELECT sum(grade) FROM "GradesTable" WHERE status='success' AND student_ID=1 ;

Si tenía la intención de ordenar por sum(grade) , puede hacerlo, pero pierde la capacidad de ordenar por grade en el momento en que lo agrega. Sin embargo, en este ejemplo no importa porque solo está devolviendo una fila.

Y como nota aparte, nunca debe citar identificadores en PostgreSQL. Escribe todo en minúsculas, nunca cite nombres de tablas o nombres de columnas.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda