我有一个数据表
city
,如下所示:
城市 | 人口 | 面积 |
---|---|---|
A | 2500000 | 800 |
B | 990000 | 400 |
C | 1200000 | 600 |
我需要计算以下每个条件的城市数量:
预期产出:
小 | 中 | 大 |
---|---|---|
1 | 1 | 1 |
我只能想到这样使用CASE:
SELECT
CASE WHEN population < 1000000 AND area < 500 THEN COUNT(*)
WHEN population > 2000000 AND area > 700 THEN COUNT(*)
ELSE COUNT(*) END AS 'big'
FROM city;
但它只返回 1 个值。
请帮我解决。
谢谢你。
你会想要这样的东西:
选择 count(IIF(人口 < 1000000 AND area < 500, 1, NULL)) as small, count(IIF((population between 1000000 AND 2000000) AND (area between 500 AND 700), 1, NULL)) as medium, count(IIF(population > 2000000 AND 面积 > 700, 1, NULL)) 一样大 来自城市;
您无法使用 WHERE 子句进行聚合,因为每列需要不同的条件。相反,您可以使用 COUNT 仅包含非空值这一事实。
只需使用 IIF 函数检查每个条件,如果为真则返回 1,否则返回 NULL。然后,计数聚合会正确地仅对与查询匹配的行进行计数。