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 50me sale este error:
ERROR: la columna "calificación" debe aparecer en la cláusula GROUP BY o usarse en una función agregada
SELECT SUM(grades) FROM ( SELECT grade as grades FROM "GradesTable" WHERE status='success' AND student_ID=1 ORDER BY grade DESC LIMIT 50 ) zEl 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 DESCSin 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.