我有一个如下所示的SQL查询:

select age_group, sum(member_count), sum(discharge_count) 
from newtable 
group by age_group 
order by age_group;

它返回以下结果:

age_group member_count discharge_count
18-64 Years 150 245
6-17 Years 185 325
65 and Above Years 125 230

但我想要这样的结果:

age_group member_count discharge_count
6-17 Years 185 325
18-64 Years 150 245
65 and Above Years 125 230

推荐答案

字符串排序不知道数字,所以发生的情况是,它首先比较第一个字母,然后比较第二个字母,依此类推.而且由于字母表中字母"6"在"1"之后,你的结果会被搞砸.您应该提取age_group字段开头的数字(带有两个SPLIT_PART),并将它们转换为数字类型(带有CAST):

select age_group, sum(member_count), sum(discharge_count) 
from newtable 
group by age_group 
order by CAST(SPLIT_PART(SPLIT_PART(age_group, ' ', 1), '-', 1) AS INTEGER);

Sql相关问答推荐

如何重用表值用户定义函数调用的结果?

PostgreSQL:如果发现多行具有相似列值,则跳过 Select 行

BigQuery`喜欢ANY‘和`不喜欢ANY’

在SQL中创建一个计数器,根据BigQuery/SQL中的条件递归地添加行值

在Golang中管理数据库事务的简洁方法

如何嵌套两条SQL语句

根据Rails活动记录中时间戳/日期时间的时间部分从PostgreSQL中提取记录

我可以在SQLite3中使用BLOB作为主键吗?

用于从第二个表中提取具有最小最终价格值的记录的SQL查询

PostgreSQL中递归CTE查询的故障过滤

Select 最频繁的值以及分组依据

在 postgres 中插入或更新 jsonb 数组的对象

在 SQL Server 中合并两个 XML 列

Postgres,使用 select 插入多个值

snowflake中的动态文件名生成

PostgreSQL:通过数组的元素从另一个表中 Select 数据,然后按顺序显示

雅典娜弄错了操作顺序

SQL日期比较用例;月初至今的报告

如何在 PL/SQL 中区分返回的 XML 值?

如何通过子 Select 在一次更新(并行数组)中多次更新相同的行