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开始编号升序排下来。。。求问大佬这怎么改。。。 可能`build_design_cpue` 不是null ,是试试`build_design_cpue`is null or `build_design_cpue`="" 空的值显示吗? 打酱油的笨小孩 发表于 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; lengkeyu 发表于 2023-3-22 15:18
可能`build_design_cpue` 不是null ,是试试`build_design_cpue`is null or `build_design_cpue`=""
对的 谢谢提供思路 加上lenth(字段)判断就好了 case when 判断一下就好了 wuqingvika 发表于 2023-3-22 15:32
谢谢你 发现了。。。。我天 郁闷了半天。。是空白的原因 改成下面这样就可以了 谢谢SELECT
tt.*,
CASE ...
不客气,加油
页:
[1]