"ORDER BY CASE..." 导致 ORDER BY 子句中的表达式无效

"ORDER BY CASE..." causing Invalid expression in ORDER BY clause

任何人都可以指出是什么导致我得到

Invalid expression in the ORDER BY clause (not contained in either an aggregate function or the GROUP BY clause)

以下查询出错?这是在 Firebird 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

您只选择了两个列,为什么要添加“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

您不能在 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;