在一个多小时的时间里,在 SQL 中,我尝试使用 CASE 创建范围,但在计算出现次数时遇到问题。目前我的代码看起来:
SELECT
CASE
WHEN engine_capacity < 1 THEN 'less than 1'
WHEN engine_capacity >= 1 AND engine_capacity <= 2 THEN '1.0 - 2.0'
WHEN engine_capacity >= 2 AND engine_capacity < 3 THEN '2.0 - 3.0'
WHEN engine_capacity >= 3 AND engine_capacity < 4 THEN '3.0 - 4.0'
WHEN engine_capacity >= 4 AND engine_capacity < 5 THEN '4.0 - 5.0'
ELSE 'more than 5'
END AS 'Range',
COUNT(1) AS 'Count'
FROM cars
GROUP BY 'Range';
我有一个错误:“每个 GROUP BY 表达式必须至少包含一列不是外部引用。”
你能帮我吗?
您需要在
CASE
子句中包含完整的 GROUP BY
语句:
SELECT
CASE
WHEN engine_capacity < 1 THEN 'less than 1'
WHEN engine_capacity >= 1 AND engine_capacity <= 2 THEN '1.0 - 2.0'
WHEN engine_capacity >= 2 AND engine_capacity < 3 THEN '2.0 - 3.0'
WHEN engine_capacity >= 3 AND engine_capacity < 4 THEN '3.0 - 4.0'
WHEN engine_capacity >= 4 AND engine_capacity < 5 THEN '4.0 - 5.0'
ELSE 'more than 5'
END AS [Range],
COUNT(1) AS [Count]
FROM cars
GROUP BY
CASE
WHEN engine_capacity < 1 THEN 'less than 1'
WHEN engine_capacity >= 1 AND engine_capacity <= 2 THEN '1.0 - 2.0'
WHEN engine_capacity >= 2 AND engine_capacity < 3 THEN '2.0 - 3.0'
WHEN engine_capacity >= 3 AND engine_capacity < 4 THEN '3.0 - 4.0'
WHEN engine_capacity >= 4 AND engine_capacity < 5 THEN '4.0 - 5.0'
ELSE 'more than 5'
END
或者,在分组之前使用子查询:
SELECT
[Range],
count(*) as [Count]
from
(
SELECT
CASE
WHEN engine_capacity < 1 THEN 'less than 1'
WHEN engine_capacity >= 1 AND engine_capacity <= 2 THEN '1.0 - 2.0'
WHEN engine_capacity >= 2 AND engine_capacity < 3 THEN '2.0 - 3.0'
WHEN engine_capacity >= 3 AND engine_capacity < 4 THEN '3.0 - 4.0'
WHEN engine_capacity >= 4 AND engine_capacity < 5 THEN '4.0 - 5.0'
ELSE 'more than 5'
END AS [Range]
FROM cars
) a
GROUP BY [Range]
选择 案件 当engine_capacity < 1 THEN 'less than 1' WHEN engine_capacity >= 1 AND engine_capacity <= 2 THEN '1.0 - 2.0' WHEN engine_capacity >= 2 AND engine_capacity < 3 THEN '2.0 - 3.0' WHEN engine_capacity >= 3 AND engine_capacity < 4 THEN '3.0 - 4.0' WHEN engine_capacity >= 4 AND engine_capacity < 5 THEN '4.0 - 5.0' ELSE 'more than 5' END AS 'Range', COUNT(1) AS 'Count' FROM cars GROUP BY CASE WHEN engine_capacity < 1 THEN 'less than 1' WHEN engine_capacity >= 1 AND engine_capacity <= 2 THEN '1.0 - 2.0' WHEN engine_capacity >= 2 AND engine_capacity < 3 THEN '2.0 - 3.0' WHEN engine_capacity >= 3 AND engine_capacity < 4 THEN '3.0 - 4.0' WHEN engine_capacity >= 4 AND engine_capacity < 5 THEN '4.0 - 5.0' ELSE 'more than 5' END