sql - 添加分组行

标签 sql database

我有一个包含客户的数据库表,其中包含他们的每个年龄等信息。

我想查询客户并将他们按年龄分组以获得如下结果:

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/

相关文章:

sql - 在 Oracle SQL 查询中创建一串连续数字

java - TestNG - WebDriver - Web 应用程序测试 - 独立测试

c++ - 如何从Visual Studio(c++)中的MySql数据库读取数据?

java - 显示记录的用户数据java

python sqlalchemy没有填写行

SQL Server——更新 `sys.*` 表而不仅仅是读取它们

java - MySQL 不使用 netbeans 将插入推送到数据库中

SQL Server 2005 数据透视查询语法帮助

sql - 你如何确定什么应该是主键?

MySQL,有两个日期的表?