wuqingvika 发表于 2023-3-22 15:07

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

本帖最后由 wuqingvika 于 2023-3-22 15:34 编辑

SELECT
      tt.*,CASE
    WHEN tt.build_design_cpue IS NOTNULL 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开始编号升序排下来。。。求问大佬这怎么改。。。

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

打酱油的笨小孩 发表于 2023-3-22 15:19
空的值显示吗?

谢谢你 发现了。。。。我天 郁闷了半天。。是空白的原因 改成下面这样就可以了 谢谢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 ...

不客气,加油
页: [1]
查看完整版本: mysql怎么将字段不为空的值 按从小到大排序后将序号赋给新的字段