吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 835|回复: 6
收起左侧

[已解决] mysql怎么将字段不为空的值 按从小到大排序后将序号赋给新的字段

  [复制链接]
wuqingvika 发表于 2023-3-22 15:07
本帖最后由 wuqingvika 于 2023-3-22 15:34 编辑

[SQL] 纯文本查看 复制代码
SELECT
        tt.*,CASE 
    WHEN tt.build_design_cpue IS NOT  NULL THEN @wrank := @wrank + 1 
    ELSE NULL
  END AS my_rank 
FROM
        (
        SELECT
                * 
        FROM
                (
                SELECT
                        userid,
                        site_id,
                        site_name,
                        build_design_cpue 
                FROM
                        ep_r_user_site AS a
                        LEFT JOIN ep_site AS b ON a.siteid = b.site_id 
                WHERE
                        a.userid = '1' 
                ) AS t 
        ORDER BY
        CASE
                        
                        WHEN t.`build_design_cpue` IS NULL THEN
                        0 ELSE 1 
                END,
        t.`build_design_cpue`) tt, 
(SELECT @wrank := 0) r;

出来的效果是这样的 但我不想要蓝色框里给我排名 应该是为空才对。。。build_design_cpue不为空才排 正确是下面部分红色的从1开始编号升序排下来。。。求问大佬这怎么改。。。 03e7d065164a4b68b7c100aadb4dc60.png

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

lengkeyu 发表于 2023-3-22 15:18
可能`build_design_cpue` 不是null ,是试试`build_design_cpue`  is null or `build_design_cpue`=""
打酱油的笨小孩 发表于 2023-3-22 15:19
 楼主| wuqingvika 发表于 2023-3-22 15:32

谢谢你 发现了。。。。我天 郁闷了半天。。是空白的原因 改成下面这样就可以了 谢谢SELECT
        tt.*,
CASE
               
                WHEN length( build_design_cpue )= 0 THEN
        NULL
                WHEN tt.build_design_cpue IS NOT NULL THEN
                @wrank := @wrank + 1 ELSE NULL
        END AS my_rank
FROM
        (
        SELECT
                *
        FROM
                (
                SELECT
                        userid,
                        site_id,
                        site_name,
                        build_design_cpue
                FROM
                        ep_r_user_site AS a
                        LEFT JOIN ep_site AS b ON a.siteid = b.site_id
                WHERE
                        a.userid = '1'
                ) AS t
        ORDER BY
        CASE
                       
                        WHEN t.`build_design_cpue` IS NULL THEN
                        0 ELSE 1
                END,
                t.`build_design_cpue`
        ) tt,
        ( SELECT @wrank := 0 ) r;
 楼主| wuqingvika 发表于 2023-3-22 15:33
lengkeyu 发表于 2023-3-22 15:18
可能`build_design_cpue` 不是null ,是试试`build_design_cpue`  is null or `build_design_cpue`=""

对的 谢谢提供思路 加上lenth(字段)判断就好了
狐白本白 发表于 2023-3-22 15:48
case when 判断一下就好了
打酱油的笨小孩 发表于 2023-3-22 16:25
wuqingvika 发表于 2023-3-22 15:32
谢谢你 发现了。。。。我天 郁闷了半天。。是空白的原因 改成下面这样就可以了 谢谢SELECT
        tt.*,
CASE ...

不客气,加油
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 23:46

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表