首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何按组而不是按数字对列进行排序?

如何按组而不是按数字对列进行排序?
EN

Stack Overflow用户
提问于 2013-04-22 22:00:05
回答 3查看 43关注 0票数 0

您好,我正在使用sql db2创建age_bands:

代码语言:javascript
运行
复制
case when age between 0 and 1 then '0-1'
when age between 2 and 3 then '2-3'
.
.
.
when age between 10 and 11 then '10-11'

当然,当你订购时,你会得到以下信息:

代码语言:javascript
运行
复制
0-1
10-11
2-3

这不是我想要的。如何按实际age_bands排序以获取:

代码语言:javascript
运行
复制
0-1
2-3
10-11

非常感谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-22 22:06:42

就这么做吧

代码语言:javascript
运行
复制
ORDER BY age

当然,年龄仍然在上升,即使age_bands CASE表达式不是

票数 1
EN

Stack Overflow用户

发布于 2013-04-22 23:58:02

如前所述,按年龄排序是最简单的。

但是,如果您需要分配波段编号或代码,或者需要按波段进行总计或统计,或者需要在波段内进行其他排序,那么您可能希望以不同的方式处理此问题。您可能想要有一个AgeBand表,定义年龄范围,可能是带号或代码,可能是年龄带的名称,或者是其他“主”数据。

如果是这种情况,您将使用

代码语言:javascript
运行
复制
left join AgeBand ab   on details.age >= ab.FromAge and details.age <= ab.ToAge
...
order by ab.BandID, ...

但是,如果您不需要AgeBand表,并且希望继续使用CASE语句计算年龄带代码,那么也可以,这可能就是您所需要的。

您可以做的是将当前查询放在一个公用表表达式( CTE )中,以准备数据,然后继续执行SELECT语句,使用分配给CTE的名称作为from表。

代码语言:javascript
运行
复制
WITH q AS
(SELECT ...
        CASE WHEN ...  THEN "00-01"
             WHEN ...  THEN "02-03"
             ...
             WHEN ...  THEN "10-11"
        END as bandcode
   FROM yourinputdata as i
   WHERE ...
)
SELECT bandcode, ...
  FROM q
  ORDER BY bandcode, ...
;

引号之间的WITH和查询是公用表表达式。它在第一行中被命名为"q“,然后在底部被引用。控制最终结果的是底部的full-select。

票数 1
EN

Stack Overflow用户

发布于 2013-04-22 22:00:46

我认为最简单的方法是:

代码语言:javascript
运行
复制
order by min(age)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16149058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档