SQL情况和分类

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

我有数据集包含不同城市的人口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;

现在,“伯爵(名称)”计算所有的城市。

sql sqlite
3个回答
1
投票
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

而外部查询不计。


0
投票

你需要你的CASE BY子句中你选择添加到组,就像这样:

select 
   case .... end as category,
   count(*) as amount
from
  cities
group by
  case .... end

0
投票

我的建议是,以创建边界值的虚拟或物理表,除去需要探索不同的边界集时更改查询。如果您正在使用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
© www.soinside.com 2019 - 2024. All rights reserved.