首页
/
每日頭條
/
圖文
/
王富貴的真實姓名
王富貴的真實姓名
更新时间:2025-09-16 16:15:23

背景:你們公司超級注重企業文化,要求大家要做好孩子多讀書,公司老闆叫王富貴,老闆娘叫張翠花,另有員工若幹人。

需求:領導要求搞一個員工讀書記錄排名,展示出每個員工所讀過的書都有啥?

分析:從這樣及其常見的一句話需求描述中,聰明的小趴菜你肯定知道,老闆肯定要排在最前面,然後應該是老闆娘,剩餘的普通員工按照姓名首字母排等等這些隐藏的需求。

方案:

首先給出數據建表腳本(Oracle)

CREATE TABLE T_BOOK_RECORD ( ID VARCHAR2(100) NOT NULL, USER_NAME VARCHAR2(100) NOT NULL, BOOK_NAME VARCHAR2(100) NOT NULL, CONSTRAINT T_BOOK_RECORD_PK PRIMARY KEY (ID) ); COMMENT ON TABLE T_BOOK_RECORD IS '閱讀記錄'; COMMENT ON COLUMN T_BOOK_RECORD.ID IS '主鍵'; COMMENT ON COLUMN T_BOOK_RECORD.USER_NAME IS '人員姓名'; COMMENT ON COLUMN T_BOOK_RECORD.BOOK_NAME IS '書籍名稱';

然後給出靈魂數據腳本

INSERT INTO T_BOOK_RECORD (ID, USER_NAME, BOOK_NAME) VALUES('1', '王富貴', '《如何合法罰款》'); INSERT INTO T_BOOK_RECORD (ID, USER_NAME, BOOK_NAME) VALUES('2', '李加成', '《舔狗的自我修養》'); INSERT INTO T_BOOK_RECORD (ID, USER_NAME, BOOK_NAME) VALUES('3', '孫正易', '《囚徒健身插圖版》'); INSERT INTO T_BOOK_RECORD (ID, USER_NAME, BOOK_NAME) VALUES('4', '王絲匆', '《窮爸爸富爸爸》'); INSERT INTO T_BOOK_RECORD (ID, USER_NAME, BOOK_NAME) VALUES('5', '趙僞', '《資本遊戲》'); INSERT INTO T_BOOK_RECORD (ID, USER_NAME, BOOK_NAME) VALUES('6', '王富貴', '《人家大愛-996福報》'); INSERT INTO T_BOOK_RECORD (ID, USER_NAME, BOOK_NAME) VALUES('7', '張翠花', '《拴住老公的胃》'); INSERT INTO T_BOOK_RECORD (ID, USER_NAME, BOOK_NAME) VALUES('8', '張翠花', '《老闆娘不是老闆的娘》'); INSERT INTO T_BOOK_RECORD (ID, USER_NAME, BOOK_NAME) VALUES('9', '李加成', '《老子明天不上班》'); INSERT INTO T_BOOK_RECORD (ID, USER_NAME, BOOK_NAME) VALUES('10', '王絲匆', '《投胎那些事》');

你最開始可能想到的方法
  • 首先,按照姓名排序查出所有數據

SELECT USER_NAME ,BOOK_NAME FROM T_BOOK_RECORD ORDER BY NLSSORT(USER_NAME,'NLS_SORT = SCHINESE_PINYIN_M')

得到結果如下:

王富貴的真實姓名(王富貴企業文化之姓名排序)1

  • 然後,通過代碼篩選出老闆王富貴和老闆娘張翠花的數據依次塞到一個集合裡

public List<BookRecord> list(){ List<BookRecord> boss = new ArrayList<>(); List<BookRecord> bossWife = new ArrayList<>(); List<BookRecord> nobody = new ArrayList<>(); for(BookRecord br : list){ if ("王富貴".equals(br.getUserName())){ boss.add(br); }else if ("張翠花".equals(br.getUserName())){ bossWife.add(br); }else { nobody.add(br); } } boss.addAll(bossWife); boss.addAll(nobody); return boss; }

其實也可以一個并不複雜的SQL直接實現

SELECT * FROM T_BOOK_RECORD ORDER BY decode(USER_NAME,'王富貴',1,'張翠花',2) ,NLSSORT(USER_NAME,'NLS_SORT = SCHINESE_PINYIN_M')

得到結果如下:

王富貴的真實姓名(王富貴企業文化之姓名排序)2

這裡主要有以下幾個知識點:

  • 字段按照拼音字母排序

SELECT * FROM T_BOOK_RECORD ORDER BY NLSSORT(USER_NAME,'NLS_SORT = SCHINESE_PINYIN_M')

  • 動态處理函數decode(),這個有點類似三目運算表達式

DECODE(USER_NAME,'王富貴',1,'張翠花',2),這個代表,如果USER_NAME='王富貴',函數返回1,如果USER_NAME='張翠花',函數返回2,這個函數的返回值是優先級最高的排序條件

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
杭州所有補貼
杭州所有補貼
來源:人民網人民網杭州3月31日電(秦文)技術工人是中等收入群體的重要組成部分,是“擴中”“提低”的九大群體之一。今天下午,杭州錢塘區召開争創高質量發展建設共同富裕示範區時代樣闆推進大會,現場發布了“錢塘區技術工人共同富裕指标體系”和“錢塘...
2025-09-16
孩子進入七歲叛逆期要如何管教
孩子進入七歲叛逆期要如何管教
婷婷自六歲以後,越來越喜歡說“不”,什麼都要跟大人反着來,尤其是最近,我叫她做什麼,她總是偏偏不做。深圳的“五一”一過,天氣就開始炎熱了,我想讓她多喝一點水,她總是以不渴為由拒絕。可十分鐘不到,她就問我:“媽媽,我要喝水。”然後咕咚咕咚一仰...
2025-09-16
為什麼不建議體罰兒子
為什麼不建議體罰兒子
當家長的基本都遵循這樣的原則,孩子即使再不聽話家長都不能打臉。不能打臉那屁股就是孩子不聽話後的最佳懲罰地帶了。表妹小時候像孩子一樣很淘氣不服管教,平常說幾句根本不管用,有次她爸爸生氣下朝着屁股狠狠的打了幾下,算是把表妹給打聽話了,可是也讓孩...
2025-09-16
防水防汗隔離防曬露
防水防汗隔離防曬露
必須要明确的防曬常識1.防曬要大量使用(大部分人做不到這一點)。一直60ml的防曬霜應該2個月内用完才足夠量。2.任何時候都需防曬!即使在陰天,陽光的輻射也依然存在,一樣會危害皮膚。3.SPF值很重要,但它隻是紫外線UVB的防護系數。你還需...
2025-09-16
濟南3000w光纖激光切割機十大排名
濟南3000w光纖激光切割機十大排名
濟南3000w光纖激光切割機十大排名?記者于悅夏侯鳳超,今天小編就來聊一聊關于濟南3000w光纖激光切割機十大排名?接下來我們就一起去研究一下吧!濟南3000w光纖激光切割機十大排名記者于悅夏侯鳳超5月26日,濟南市委市政府舉行新聞發布會。...
2025-09-16
Copyright 2023-2025 - www.tftnews.com All Rights Reserved