Le problème ici est la clause ORDER BY
que vous savez si vous avez collé l'erreur complète, au lieu de nous forcer à recréer votre problème à partir de zéro parce que vous n'avez pas fourni le DDL et les données.
CREATE TABLE "GradesTable" (status text, student_id int, grade int);
INSERT INTO "GradesTable" (status, student_id, grade) VALUES
('success', 1, 80),
('success', 1, 100);
Recherche
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
Cependant cela fonctionne,
SELECT sum(grade)
FROM "GradesTable"
WHERE status='success' AND student_ID=1
LIMIT 50
;
sum
-----
180
(1 row)
Mais vous ne devriez pas avoir un LIMIT
si vous avez seulement un agg qui ne peut jamais retourner une ligne.
SELECT sum(grade)
FROM "GradesTable"
WHERE status='success' AND student_ID=1
;
Si vous vouliez commander par sum(grade)
vous pouvez le faire, mais vous perdez la possibilité de commander par grade
le second vous regroupez ensemble. Cependant, dans cet exemple, cela n'a pas d'importance car vous ne renvoyez qu'une ligne.
Et dans une note séparée, vous ne devriez jamais citer d'identifiants dans PostgreSQL. Faites tout en minuscules, ne citez jamais les noms de tables ou de colonnes.
L'erreur que je reçois vient de cette requête: SELECT SUM (grade) FROM "GradesTable" où le statut = 'succès' ET student_ID = 1 ORDER BY qualité DESC LIMIT 50 –
La requête que vous avez montré ** NE * * produire cette erreur. S'il vous plaît [modifier] votre question et ajouter la vraie requête. Ne postez pas de code ou d'informations supplémentaires dans les commentaires –
@a_horse_with_no_name ce n'est pas vrai, voir le 'ORDER BY'. C'est la première fois que je pense que vous avez eu tort à propos de quelque chose, même indirectement, lié à PostgreSQL. –