mysql中order?by根據(jù)like查找關(guān)鍵字段設(shè)置權(quán)重排序的操作方法
1.存在的問(wèn)題,應(yīng)該將普通號(hào)排在前面

2.造成問(wèn)題的原因
下面的Java代碼中對(duì)YSXM做了拼接,sql是對(duì)KSID做的排序,比如數(shù)據(jù)庫(kù)中YSXM的名稱在普通號(hào)的前面的話,根據(jù)Java代碼那么人名就會(huì)在前面后面普通號(hào)就被拼在了后面。
List<JSONObject> thisWeek = apiService.getListByApi(3258, param).getData();
Map<String, List<JSONObject>> resultMap = new HashMap<>();
//拼接醫(yī)師內(nèi)容
HashMap<String, JSONObject> weekMap = new HashMap<>();
for (JSONObject week : thisWeek) {
String key = week.getString("KSID") + "|" + week.getString("RQ") + "|" + week.getString("BC");
JSONObject js = weekMap.get(key);
if (StringUtils.isNotEmpty(js)) {
//存在排班文檔時(shí)
js.put("YSXM", js.getString("YSXM") +"、"+ week.getString("YSXM"));
js.put("YSDM", js.getString("YSDM") +"、"+ week.getString("YSDM"));
weekMap.put(key, js);
}else {
//不存在時(shí)
weekMap.put(key, week);
}
}
sql:
SELECT MZGH_NYSPB.ID
, MZGH_NYSPB.YSDM
, MZGH_NYSPB.YSXM
, MZGH_NYSPB.ZBDM
, MZGH_NYSPB.KSID
, MZGH_NYSPB.KSMC
, MZGH_NYSPB.XQJ
, MZGH_NYSPB.RQ
, MZGH_NYSPB.BC
, MZGH_NYSPB.YYXE
, MZGH_NYSPB.YYRS
, MZGH_NYSPB.ZT
, MZGH_NYSPB.BZ
, MZGH_NYSPB.XQ
FROM MZGH_NYSPB WHERE TO_DATE(MZGH_NYSPB.RQ, 'yyyy/MM/dd') >= TO_DATE('2026-3-1', 'yyyy/MM/dd')
AND TO_DATE(MZGH_NYSPB.RQ, 'yyyy/MM/dd') <= TO_DATE('2026-3-7', 'yyyy/MM/dd')
AND JGDM = 66
--and ysxm like '田%'
--and ID = '11482722026/03/06下午'
ORDER BY KSID如圖所示:

3.修改后的sql:
SELECT MZGH_NYSPB.ID
, MZGH_NYSPB.YSDM
, MZGH_NYSPB.YSXM
, MZGH_NYSPB.ZBDM
, MZGH_NYSPB.KSID
, MZGH_NYSPB.KSMC
, MZGH_NYSPB.XQJ
, MZGH_NYSPB.RQ
, MZGH_NYSPB.BC
, MZGH_NYSPB.YYXE
, MZGH_NYSPB.YYRS
, MZGH_NYSPB.ZT
, MZGH_NYSPB.BZ
, MZGH_NYSPB.XQ
FROM MZGH_NYSPB WHERE TO_DATE(MZGH_NYSPB.RQ, 'yyyy/MM/dd') >= TO_DATE('2026-3-1', 'yyyy/MM/dd')
AND TO_DATE(MZGH_NYSPB.RQ, 'yyyy/MM/dd') <= TO_DATE('2026-3-7', 'yyyy/MM/dd')
AND JGDM = 66
ORDER BY KSID,
-- 關(guān)鍵修改:讓普通號(hào)排在前面
CASE
WHEN YSXM LIKE '普通號(hào)%' THEN 0 -- 普通號(hào)排在最前
ELSE 1 -- 其他排在后
END,
YSXM 4.這段排序語(yǔ)句的含義解析:
CASE
WHEN YSXM LIKE '%普通號(hào)%' THEN 0 -- 普通號(hào)排在最前
ELSE 1 -- 其他排在后
END,
YSXM -- 同類型內(nèi)按姓名排序
1. 第一層排序:CASE WHEN表達(dá)式
- 目的:創(chuàng)建一個(gè)臨時(shí)排序權(quán)重
- 邏輯:
- 如果
YSXM字段包含"普通號(hào)",返回權(quán)重值 0 - 其他情況(如"田文君"等醫(yī)生姓名),返回權(quán)重值 1
- 如果
- 效果:
ORDER BY會(huì)先按這個(gè)權(quán)重值排序,0在前,1在后,所以"普通號(hào)"會(huì)排在前面
2. 第二層排序:YSXM字段
- 目的:在權(quán)重值相同的情況下,進(jìn)行二級(jí)排序
- 為什么要加這個(gè):
- 當(dāng)權(quán)重值相同時(shí)(比如有多個(gè)"普通號(hào)"記錄,或多個(gè)非"普通號(hào)"記錄),需要確定這些記錄之間的順序
- 比如:如果有兩個(gè)"普通號(hào)"記錄,它們的權(quán)重值都是0,那么按字母順序排序這兩個(gè)"普通號(hào)"記錄
- 再比如:如果有"張三"和"李四"兩個(gè)醫(yī)生,它們的權(quán)重值都是1,那么按姓名排序這兩個(gè)醫(yī)生
3.實(shí)際排序效果示例
假設(shè)數(shù)據(jù)如下:
ID | YSXM
----|---------
1 | 普通號(hào)
2 | 田文君
3 | 普通號(hào)
4 | 李醫(yī)生
5 | 王醫(yī)生
排序過(guò)程:
- 先按權(quán)重值排序(普通號(hào)=0,其他=1):
- 權(quán)重0:普通號(hào)、普通號(hào)
- 權(quán)重1:田文君、李醫(yī)生、王醫(yī)生
- 在權(quán)重相同的組內(nèi),再按YSXM字母順序排序:
- 權(quán)重0組內(nèi)排序:普通號(hào)、普通號(hào)(兩者相同,按數(shù)據(jù)庫(kù)默認(rèn)順序)
- 權(quán)重1組內(nèi)排序:李醫(yī)生、田文君、王醫(yī)生(按拼音/字母順序)
最終排序結(jié)果:
普通號(hào)
普通號(hào)
李醫(yī)生
田文君
王醫(yī)生
4.如果不需要二級(jí)排序,可以簡(jiǎn)化
如果只需要保證"普通號(hào)"在前面,同一類型內(nèi)部的順序無(wú)所謂,可以去掉最后的YSXM:
ORDER BY KSID,
CASE
WHEN YSXM LIKE '%普通號(hào)%' THEN 0
ELSE 1
END這樣會(huì)更快,但同一權(quán)重組內(nèi)的記錄順序可能不確定。
改完后展示就正常了

到此這篇關(guān)于mysql中order by根據(jù)like查找關(guān)鍵字段設(shè)置權(quán)重排序的操作方法的文章就介紹到這了,更多相關(guān)mysql order by權(quán)重排序內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL查看每個(gè)分區(qū)的數(shù)據(jù)量的查詢方法
在MySQL中,分區(qū)表是一種將數(shù)據(jù)分割成更小、更易管理的部分的方法,通過(guò)分區(qū),可以顯著提高查詢性能和數(shù)據(jù)管理效率,在實(shí)際應(yīng)用中,了解每個(gè)分區(qū)中的數(shù)據(jù)量有助于優(yōu)化和監(jiān)控?cái)?shù)據(jù)庫(kù)性能,本文將介紹如何查看MySQL中每個(gè)分區(qū)的數(shù)據(jù)量,需要的朋友可以參考下2025-07-07
MySQL中的SHOW FULL PROCESSLIST命令實(shí)現(xiàn)
SHOW FULL PROCESSLIST命令是MySQL中一個(gè)非常有用的工具,可以幫助我們理解和監(jiān)控MySQL服務(wù)器的狀態(tài),本文主要介紹了MySQL中的SHOW FULL PROCESSLIST命令,感興趣的可以了解一下2023-11-11
MySQL 一次執(zhí)行多條語(yǔ)句的實(shí)現(xiàn)及常見(jiàn)問(wèn)題
通常情況MySQL出于安全考慮不允許一次執(zhí)行多條語(yǔ)句(但也不報(bào)錯(cuò),很讓人郁悶)。2009-08-08
mysql -參數(shù)thread_cache_size優(yōu)化方法 小結(jié)
以下是某門(mén)戶網(wǎng)站的mysql狀態(tài)實(shí)例及分析過(guò)程,絕對(duì)的第一手?jǐn)?shù)據(jù)資料,很生動(dòng)的體現(xiàn)了參數(shù)thread_cache_size優(yōu)化的效果及優(yōu)化該參數(shù)的必要性,希望對(duì)各位系統(tǒng)管理員能有幫助。2011-03-03

