2016-12-29 49 views
2

任何人都可以指出是什麼原因造成我獲得「ORDER BY CASE ......」爲了使無效表達BY子句

無效表達ORDER BY子句(不包含在聚合函數或GROUP BY子句)

有關以下查詢的錯誤?這是在火鳥2.5。

SELECT COUNT(*) AS total, 
     CASE WHEN YR BETWEEN 1990 AND 1995 THEN '1990-1995' 
      WHEN YR BETWEEN 1996 AND 2000 THEN '1996-2000' 
      WHEN YR BETWEEN 2001 AND 2005 THEN '2001-2005' 
      ELSE '2005-2017' END AS vehicle_year 
FROM bb_history 
GROUP BY 2 
ORDER BY CASE WHEN YR BETWEEN 1990 AND 1995 THEN 1 
       WHEN YR BETWEEN 1996 AND 2000 THEN 2 
       WHEN YR BETWEEN 2001 AND 2005 THEN 3 
       ELSE 4 END 
+1

有分組後沒有'yr'列。要麼包括年選擇或修改您的訂單 – GurV

+1

'訂購2'應該是現在就可以了 – GurV

+0

@GurwinderSingh謝謝! – Phil

回答

2

不能在order by使用YR列,因爲它是不分組結果的一部分。看來你只是想通過生成的vehicle_year列順序,因此你可以通過(或2)命令:

SELECT COUNT(*) AS total, 
     CASE WHEN YR BETWEEN 1990 AND 1995 THEN '1990-1995' 
      WHEN YR BETWEEN 1996 AND 2000 THEN '1996-2000' 
      WHEN YR BETWEEN 2001 AND 2005 THEN '2001-2005' 
      ELSE '2005-2017' END AS vehicle_year 
FROM bb_history 
GROUP BY 2 
ORDER BY vehicle_year; 
+1

按照實施方式,很可能它已經被排序而沒有'order by'(僅僅是'取決於它)。 –

-2

你只有兩個選擇列,爲什麼你加入「3」和「4」,但這裏是查詢:

SELECT COUNT(*) AS total, 
     CASE WHEN YR BETWEEN 1990 AND 1995 THEN '1990-1995' 
      WHEN YR BETWEEN 1996 AND 2000 THEN '1996-2000' 
      WHEN YR BETWEEN 2001 AND 2005 THEN '2001-2005' 
      ELSE '2005-2017' END AS vehicle_year 
FROM bb_history 
GROUP BY 2 
ORDER BY CASE WHEN vehicle_year BETWEEN 1990 AND 1995 THEN 1 
       WHEN vehicle_year BETWEEN 1996 AND 2000 THEN 2 
       WHEN vehicle_year BETWEEN 2001 AND 2005 THEN 3 
       ELSE 4 END 
+0

這種情況下,不會按列索引排序,而是按**值** 1,2,3或4排序。 –