You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL多列排序:首列升序,次列为空/0的行后置

解决PostgreSQL多列排序问题:将monies为NULL/0的行置于末尾

我来帮你搞定这个排序需求!你的目标是对user表先按username字母升序排列,但要把monies字段为NULL或者0的行放到所有有效数据行的后面对吧?咱们一步步来修正你的SQL。

问题分析

你原来的SQL有两个关键问题:

  1. 字段名错误:你用了name,但表中实际字段是username;
  2. 只处理了NULL值的位置,没有把monies=0的行也归到末尾,所以达不到预期效果。

正确的SQL语句

要实现需求,我们可以用CASE表达式先把数据分成两组(有效monies组和无效组),让有效组排在前面,然后每组内按username升序排序:

SELECT 
  * 
FROM 
  "user"
ORDER BY 
  -- 第一排序条件:标记无效行(NULL或0)为1,有效行为0,让有效行在前
  CASE WHEN monies IS NULL OR monies = 0 THEN 1 ELSE 0 END ASC,
  -- 第二排序条件:每组内按username字母升序排列
  username ASC;

验证结果

运行这个SQL后,结果会和你期望的完全一致:

username    monies    zip
allan       12       34333
jim         25       87888
will         4       88788
abel       null      87888
adrian       0       97677

可选扩展:如果有效组内需要按monies排序

要是你希望有效组内除了按username排序,还想按monies排序(比如降序),可以再加一个排序条件:

SELECT 
  * 
FROM 
  "user"
ORDER BY 
  CASE WHEN monies IS NULL OR monies = 0 THEN 1 ELSE 0 END ASC,
  username ASC,
  monies DESC; -- 有效组内按monies降序排列

内容的提问来源于stack exchange,提问作者Jimski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:11:24