"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;
任何人都可以指出是什么导致我得到
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;