Ich habe die folgende Abfrage:Gruppierung scheint nicht zu arbeiten, wie ich (SQL Server) erwartet
SELECT
AVG(CAST(RATING AS NUMERIC(18, 2))) AS AVERAGE,
QUESTIONID,
COUNT(QUESTIONID) AS COUNT
FROM
AnswersRating
WHERE
SURVEYID IN (SELECT ID
FROM SURVEYS
WHERE FLIGHTDATAID = 7277)
GROUP BY
QUESTIONID;
Und ich dieses Ergebnis:
AVERAGE QUESTIONID COUNT
-------------------------
3.606060 115 99
4.303030 109 99
2.969696 118 99
3.818181 112 99
2.545454 113 99
3.787878 121 99
3.606060 110 99
2.363636 119 99
3.515151 116 99
3.272727 117 99
4.242424 111 99
3.909090 120 99
2.333333 114 99
das ist schön und alle außer Die Zeile QUESTIONID
ist nicht nach der ID von der niedrigsten zur höchsten angeordnet, was ich möchte. Ich habe die gleiche Abfrage auf einem anderen Flug, wo Dinge richtig angezeigt:
AVERAGE QUESTIONID COUNT
--------------------------
3.000000 109 1
3.000000 110 1
3.000000 111 1
3.000000 112 1
0.000000 113 1
0.000000 114 1
3.000000 115 1
0.000000 116 1
3.000000 117 1
3.000000 118 1
0.000000 119 1
3.000000 120 1
3.000000 121 1
Was mache ich falsch?
Wenn Sie Dinge in einer bestimmten Reihenfolge wünschen, verwenden Sie 'order by questionid'. Die Reihenfolge der Ergebnisse zu ordnen ist nicht Aufgabe von 'group by'. –
Aber ich kann 'ORDER BY' nicht verwenden:' Spalte 'AnswersRating.QUESTIONID' ist in der Auswahlliste ungültig, weil sie weder in einer Aggregatfunktion noch in der GROUP BY-Klausel enthalten ist. – OmniOwl
'ORDER BY QUESTIONID' – Squirrel