我有数据集包含不同城市的人口differen。我需要做的表那样的画面。
因此,“量”是许多城市是如何在这一类。
到目前为止,我有这样的:
SELECT COUNT(name) AS AMMOUNT,
CASE
WHEN population > 5000000 THEN 'Over 5 miljon'
WHEN population > 1000000
AND population < 4999999 THEN '1 000 000 - 4 999 999'
WHEN population > 500000
AND population < 999999 THEN '500 000 - 999 999'
WHEN population > 100000
AND population < 499999 THEN '100 000 - 499 999'
WHEN population < 100000 THEN 'Below 100 000'
END AS Category
FROM cities;
现在,“伯爵(名称)”计算所有的城市。
SELECT COUNT(name) AS AMMOUNT, category from
(select name, CASE
WHEN population > 5000000 THEN 'Over 5 miljon'
WHEN population > 1000000
AND population < 4999999 THEN '1 000 000 - 4 999 999'
WHEN population > 500000
AND population < 999999 THEN '500 000 - 999 999'
WHEN population > 100000
AND population < 499999 THEN '100 000 - 499 999'
WHEN population < 100000 THEN 'Below 100 000'
END AS Category
FROM cities) t
group by Category;
你需要找到每个城市的类别,再算上属于同一类别的城市。内部查询,发现类别:
select name, CASE
WHEN population > 5000000 THEN 'Over 5 miljon'
WHEN population > 1000000
AND population < 4999999 THEN '1 000 000 - 4 999 999'
WHEN population > 500000
AND population < 999999 THEN '500 000 - 999 999'
WHEN population > 100000
AND population < 499999 THEN '100 000 - 499 999'
WHEN population < 100000 THEN 'Below 100 000'
END AS Category
FROM cities
而外部查询不计。
你需要你的CASE BY子句中你选择添加到组,就像这样:
select
case .... end as category,
count(*) as amount
from
cities
group by
case .... end
我的建议是,以创建边界值的虚拟或物理表,除去需要探索不同的边界集时更改查询。如果您正在使用SQL Server,那么你可以使用一个表变量类似于下面的几个值。
DECLARE @Boundries TABLE(LowValue INT, HighValue INT, Decription NVARCHAR(500))
INSERT @Boundries VALUES (1,99999,'Below 100 000'),(100000,499999,'100 000 - 499 999'),(500000,999999,'500 000 - -999 999'),(1000000,4999999,'1 000 000 - 4 999 999'),(5000000,1000000000,'Over 5 Million')
;WITH Data As
(
SELECT Name,Population = COUNT(*)
FROM cities
GROUP BY Name
)
SELECT D.Name,D.Population,B.Decription
FROM
Data D
INNER JOIN @Boundries B ON D.Population BETWEEN B.LowValue AND B.HighValue