2016-08-01 31 views
0

我有以下查詢:集團通過似乎不工作,我預計(SQL Server)的

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; 

我得到這樣的結果:

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 

這是很好的,所有除QUESTIONID行沒有按照從最低到最高的ID排序,這正是我想要的。我在另一個航班上做了完全相同的查詢,發現事情正確:

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 

我在做什麼錯?

+5

如果您想按特定順序進行操作,請使用'order by questionid'。排序結果不是「group by」的工作。 –

+0

但是我不能使用'ORDER BY':'Column'AnswersRating.QUESTIONID'在選擇列表中是無效的,因爲它不包含在聚合函數或GROUP BY子句中。' – OmniOwl

+1

'ORDER BY QUESTIONID' – Squirrel

回答

4

如果你想爲你的結果一個特定的順序,你必須指定一個ORDER BY,其中GROUP BY後進來條款順序。這兩個條款並不相互排斥:

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 
ORDER BY QUESTIONID; 

您的第二個查詢返回的結果純粹是巧合。

+1

Ooh ...我從來沒有考慮過我可以在同一查詢中使用Order By和Group By ... derp oo謝謝 – OmniOwl

+0

如果它是右鍵單擊作爲答案@vipar –

+0

是的,但我還不能。網站告訴我我必須等待。 – OmniOwl

4

爲什麼不使用Order By?分組並不意味着排序。

ORDER BY QUESTIONID;