SQL - 使用 CASE 语句创建范围 - 错误:每个 GROUP BY 表达式必须至少包含一列不是外部引用

问题描述 投票:0回答:2

在一个多小时的时间里,在 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 表达式必须至少包含一列不是外部引用。”

你能帮我吗?

sql-server group-by count range case
2个回答
1
投票

您需要在

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]

0
投票

选择 案件 当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

© www.soinside.com 2019 - 2024. All rights reserved.