【问题标题】:Group ages by city按城市分组年龄
【发布时间】:2015-11-09 16:53:09
【问题描述】:

我很难分组;我正在研究有关我所在地区人口的 ISTAT(意大利统计研究所)数据;他们为我提供了每个城市和每个年龄(0、1、2 等)的数据,我需要将每个城市的年龄分组为 10 岁(0-9、10-19 等)。前几行示例:

| ID | CodiceComune | Eta | Celibi | Coniugati | Divorziati | Vedovi | TotMaschi | Nubili | Coniugate | Divorziate | Vedove | TotFemmine |
+----+--------------+-----+--------+-----------+------------+--------+-----------+--------+-----------+------------+--------+------------+
|  1 |        42001 |   0 |     30 |         0 |          0 |      0 |        30 |     22 |         0 |          0 |      0 |         22 |
|  2 |        42001 |   1 |     22 |         0 |          0 |      0 |        22 |     22 |         0 |          0 |      0 |         22 |
|  3 |        42001 |   2 |     27 |         0 |          0 |      0 |        27 |     21 |         0 |          0 |      0 |         21 |
|  4 |        42001 |   3 |     23 |         0 |          0 |      0 |        23 |     26 |         0 |          0 |      0 |         26 |
|  5 |        42001 |   4 |     33 |         0 |          0 |      0 |        33 |     24 |         0 |          0 |      0 |         24 

其中CodiceComune 是分配给每个城市的 ISTAT 代码,Eta 是年龄(范围从 0 到 100),TotMaschi 是该城市具有该年龄的男性总数,TotFemmine 是该城市中具有该年龄的女性总数;您不需要翻译其他列,因为我不需要这些数据。

我想要得到的是一个视图,其中包含,对于每个城市,每个年龄段的男性总数和女性总数,即城市 42001 中的男性数量在 @ 之间987654328@ 和9 岁,依此类推。

作为记录,我已经尝试了解决方案here,但它不符合我的目的,我无法将链接中的代码调整为我的案例;当然我知道我可以在 Excel 中做到这一点,但由于表格有超过 24,000 行,这将花费我一生的时间。

【问题讨论】:

  • 你已经知道人民的年龄(Eta)...
  • 是的,我知道每个城市有多少 10 岁或 34 岁或其他年龄的人,但我需要了解每个城市有多少男性和多少女性在每个年龄段
  • 我发布了一个答案,您可以按这个年龄按 div(整数除法)除以 10 进行分组。按 Comune 求和和分组...
  • 想要的结果是什么样的?

标签: mysql sql excel group-by


【解决方案1】:

例如:

SELECT CodiceComune
     , CONCAT(FLOOR((Eta+0.5)/10)*10,'-',(CEILING((Eta+0.5)/10)*10)-1) Age_group
     , SUM(TotMaschi) m
     , SUM(TotFemmine) f 
  FROM my_table 
 GROUP 
    BY CodiceComune
     , FLOOR(Eta/10);

【讨论】:

  • @Ale 我稍微调整了一下
  • 我弄清楚了 FLOOR 和 CEILING 在代码中的作用,但我猜神奇的是 group by 子句,不是吗?
  • 好吧,我们可以改为按age_group 分组
【解决方案2】:

这将计算 MySQL 中 10 年范围内的男性人数

SELECT COUNT(TotMaschi) FROM tablename WHERE CodiceComune = 42001 AND eta IN (0,1,2,3,4,5,6,7,8,9)

【讨论】:

  • 来吧;这不是很可扩展!
  • 好的,如何为每个城市(我所在地区有 239 个城市)和每个年龄段的所有内容放在一个视图中?
  • 这是一个开始@Strawberry。我无法编写整个代码。这可能不是全部答案。
  • @ale 你需要为所有239个城市编写一个程序来实现或使用PHP的帮助来实现最终结果
  • 我对 PHP 一点经验都没有;无论如何,我稍微修改了你的代码,我得到了每个城市一个年龄段的人数总和;我做了 SELECT CodiceComune, SUM(TotMaschi) AS 'Maschi0-9' FROM pop_eta_comuni WHERE Eta BETWEEN 0 AND 9 GROUP BY CodiceComune;
【解决方案3】:

这是 TotMaschi 和 totFemmine 的样本......每个 CodiceComune 十年内年龄范围内的人口总和。

select CodiceComune, sum(totMaschi), sum(toyFemmine), eta div 10 as age_range 
from tablename 
group by CodiceComune, age_range;

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2020-10-27
  • 1970-01-01
  • 2022-01-13
  • 1970-01-01
  • 2018-12-27
  • 1970-01-01
  • 2012-02-04
  • 2016-11-24
相关资源
最近更新 更多