我有一个包含客户的数据库表,其中包含他们的每个年龄等信息。
我想查询客户并将他们按年龄分组以获得如下结果:
Age_Group Num_Of_Cust
0-10 Count
10-20 Count
20-30 Count
这可以在单个查询中完成吗?我基本上想插入表行值并计算第二列中该年龄组的人数。
最佳答案
尝试类似的东西
select age / 10, count(*) from table_name group by age / 10 order by age / 10;
这将为您提供一个结果,其中的行首先包含分组年龄的十列,然后是该范围内的数字。范围实际上是 0-9、10-19 等;如果你想把它调高,你可以用 (age-1)
替换 age
。请注意,它还会跳过不包含客户的范围。
为了更准确地重现请求的输出 - 但可能无法在所有 RDBMS 中工作(在 PostgreSQL 上测试),可以使用以下内容:
select concat(Age*10, '-', Age*10+9) as Age_Group, Num_of_Cust from (
select age / 10 as Age, count(*) as Num_Of_Cust from test
group by age / 10 order by age / 10) as X;
(我不喜欢子选择,但似乎有必要获得正确的顺序和标签。按 Age_Group
本身排序会在 20-29 之前放置,比如说 100-109。试图转换 Age_Group
让 PostgreSQL 抗议它不是列。还需要最后的 as X
来消除子查询需要别名的提示。)
关于sql - 添加分组行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13691250/