sql按照某个字段的特定值进行排序

今天遇到一个特殊的需求,一个表中的字段值state 有:10,20,30,40,50,60。
现在需要优先排序state=40的记录。网上搜索查了一下大概有两种折中的方案:

方案一:
给state 字段进行decode ,指定一个较大的值,然后进行降序排列,以达到目的。

order by decode(state,'40',99,to_number(state)) desc ,created_date desc

方案一:
使用case when方法,升序排列

  order by 
      case 
          when state='41' then 1 
          else state
      end desc,created_date desc
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 在SQL,可以使用 "ORDER BY" 子句来对查询结果进行排序。 - 将某行置顶: 使用 "ORDER BY 要置顶的字段 DESC, 其他字段 ASC" 。 - 将某行置底: 使用 "ORDER BY 要置底的字段 ASC, 其他字段 DESC" 。 - 其他行按字段排序: 使用 "ORDER BY 字段1 [ASC|DESC], 字段2 [ASC|DESC],..." 。 如下是一个例子: ``` SELECT * FROM table_name ORDER BY is_top DESC, name ASC, age DESC ``` 这个例子会先将is_top字段为1的置顶,然后按照name字段升序排列,最后按照age字段降序排列。 ### 回答2: 要用SQL将某行置顶,并同时保持其他行按字段排序,可以使用以下步骤: 1. 首先,使用SELECT语句查询出要排序的数据,并按照指定的字段进行排序。例如,使用ORDER BY语句按照某个字段(如ID)进行排序。 2. 接下来,使用UNION ALL操作符将想要置顶的行添加到查询结果的最前面。首先,使用SELECT语句查询出要置顶的行,并确保查询结果的列顺序和前述查询结果一致。然后使用UNION ALL操作符将此查询结果与前述查询结果相连。 3. 这时,你会发现想要置顶的行已经在查询结果的最前面了,但是其他行可能还没有按照字段排序。为了解决这个问题,可以将整个查询结果作为子查询,并使用外部查询对子查询结果再次排序。在外部查询,使用ORDER BY语句按照相同的字段进行排序。 例如,假设要把ID为5的行置顶,并按照ID字段排序,可以使用如下SQL语句: SELECT * FROM ( SELECT * FROM 表名 ORDER BY ID UNION ALL SELECT * FROM 表名 WHERE ID = 5 ) AS 子查询 ORDER BY ID 这样就可以将ID为5的行置顶,并保持其他行的按照ID字段排序。 ### 回答3: 在 SQL ,可以通过使用 "ORDER BY" 子句对数据进行排序。要将某行置顶或置底,可以通过指定一个特殊的排序来实现。 如果要将某行置顶,可以将该行的排序设为一个较小的,比如负无穷小。这样,即使其他行按照字段排序,该行也会处在最前面。 示例代码如下: ``` SELECT * FROM 表名 ORDER BY CASE WHEN id = '置顶行的ID' THEN -999999 ELSE 字段名 END ``` 上述代码,使用了 CASE 表达式,判断每行的 ID 是否等于指定的置顶行的 ID。如果相等,则排序设置为 -999999,否则按照字段进行排序。 如果要将某行置底,可以将该行的排序设为一个较大的,比如正无穷大。这样,即使其他行按照字段排序,该行也会处在最后面。 示例代码如下: ``` SELECT * FROM 表名 ORDER BY CASE WHEN id = '置底行的ID' THEN 999999 ELSE 字段名 END ``` 上述代码,同样使用了 CASE 表达式,判断每行的 ID 是否等于指定的置底行的 ID。如果相等,则排序设置为 999999,否则按照字段进行排序。 总结起来,通过在 ORDER BY 子句使用 CASE 表达式,并根据特定的条件给出不同的排序,可以实现将某行置顶、某行置底,同时对其他行按照字段排序的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值