sql 以某個字段升序排序排除0

今天遇到這樣一個問題,數據初始化時排序字段爲0,但是產品需求是排序字段升序排列,但是排序字段爲0又想在最後進行展示。那我就只能修改之前sql了。

先展示最初sql寫法:

SELECT
  pd.id AS "detailId", 
  pd.title,
  IFNUll(pd.brief_cont,'') AS briefCont,
      pd.content,
      case when (pd.content is not null AND pd.show_type='1') then null else pd.uri end  as uri,
  pd.create_date AS createDate, 
  pd.is_top,
  pd.sequence
FROM
    z_portal p
INNER JOIN z_portal_details pd ON p.id = pd.protal_id
INNER JOIN z_portal_style_details zsd ON p.school_portal_style = zsd.style_id 
AND pd.exercise_type = zsd.`code`
WHERE
    p.status = 0
AND p.is_delete = 0
AND p.id = 21
AND p.tenant_id = '002'
AND pd.is_delete = 0
AND pd.type = 2
AND pd.exercise_type = 1
AND pd.coordinate=1
AND pd.tenant_id = '002'
AND zsd.is_delete = 0
AND zsd.parent_id = 0
AND zsd.tenant_id = '002'
GROUP BY
    pd.id
ORDER BY
    pd.is_top desc, pd.sequence = 0,pd.sequence asc , pd.create_date desc

數據返回:
在這裏插入圖片描述
根據需求sql調整後:

SELECT
	pd.id AS "detailId", 
	pd.title,
	IFNUll(pd.brief_cont,'') AS briefCont,
			pd.content,
			case when (pd.content is not null AND pd.show_type='1') then null else pd.uri end  as uri,
	pd.create_date AS createDate, 
	pd.is_top,
	pd.sequence
FROM
		z_portal p
INNER JOIN z_portal_details pd ON p.id = pd.protal_id
INNER JOIN z_portal_style_details zsd ON p.school_portal_style = zsd.style_id 
AND pd.exercise_type = zsd.`code`
WHERE
		p.status = 0
AND p.is_delete = 0
AND p.id = 21
AND p.tenant_id = '002'
AND pd.is_delete = 0
AND pd.type = 2
AND pd.exercise_type = 1
AND pd.coordinate=1
AND pd.tenant_id = '002'
AND zsd.is_delete = 0
AND zsd.parent_id = 0
AND zsd.tenant_id = '002'
GROUP BY
		pd.id
ORDER BY
		 pd.is_top desc, pd.sequence = 0,pd.sequence asc , pd.istop_time DESC,pd.create_date desc

數據返回就發生變化:
在這裏插入圖片描述
這是因爲:pd.sequence=0,表示排除等於0的,對不等於0的先進行排序,等於0放在最後按照正序排;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章