首页
/
每日頭條
/
圖文
/
王富貴的真實姓名
王富貴的真實姓名
更新时间:2026-04-02 10:49:34

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

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

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

方案:

首先給出數據建表腳本(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
推荐阅读
朱竹清終于接受戴沐白(朱竹清為何稱和星羅學院是生死之戰)
朱竹清終于接受戴沐白(朱竹清為何稱和星羅學院是生死之戰)
  導讀:随着鬥羅大陸動畫96集的更新,戴沐白的哥哥戴維斯和朱竹清的姐姐朱竹雲也相繼登場。他們所在的星羅皇家學院和史萊克學院在第三輪狹路相逢。本來隻是一場普通的魂師交流大賽,為何戴沐白卻說是生死大戰呢?      戴沐白和朱竹清的家族   一場魂師交流大賽,卻為何要以命相搏?主要是因為戴沐白和星羅學院隊長戴維斯的關系。戴沐白和朱竹清都是星羅帝國人,分别屬于兩...
2026-04-02
故宮中的養心殿是用來幹什麼的(故宮最精美的養心殿将閉門精修)
故宮中的養心殿是用來幹什麼的(故宮最精美的養心殿将閉門精修)
  故宮博物院院長單霁翔說:“養心殿是故宮最精美、工藝難度最高的建築,因為有了修複壽康宮、慈甯宮的經驗,這才敢啟動養心殿的修繕。”      圖為養心殿中慈禧垂簾聽政的地方。 文彙報首席記者 江勝信攝   ■文彙報首席記者 江勝信   故宮城牆暗藏險情,養心殿出現多處隐患,古建修繕人才卻青黃不接,怎麼辦?故宮文物總數超過180萬件套,因前殿後宮不可能大規模改...
2026-04-02
田言嫁給誰了(究竟誰在套路誰)
田言嫁給誰了(究竟誰在套路誰)
  導語:在秦時明月最新的劇情當中,農家衆人集體上演了感人的一幕。原本農家六堂人多勢衆,在江湖上也算是基礎雄厚。可是六堂之人卻各自争鬥,每位堂主都對俠魁之位觊觎已久,因此,農家不得不分為兩大派。但随着劇情的發展,實力占優的田言這一派逐漸掌握了大局。因此心有不服的朱家也不得不審時度勢,将神農堂投向田言的懷抱,雙方彼此化解了往日的恩怨。      可事實上真的有...
2026-04-02
巨龍咆哮卡組(巨龍咆哮龍牧歸來)
巨龍咆哮卡組(巨龍咆哮龍牧歸來)
  新版本中,牧師大部分都以恩佐斯環牧和克蘇恩牧的形态征戰天梯,而最近歐服玩家用一套微調過的龍牧卡組成功登頂歐服第一,讓我們一起來看看吧~      【卡組詳情】      【卡牌選擇】   這套牌在傳統龍牧的基礎上增加了2張古神新卡,禁忌畸變和變幻之影。   禁忌畸變:很多人覺得這張卡随機性太大,但是相對的在龍牧卡組中這張牌能帶來更多的變化。當你手中卡着一...
2026-04-02
極限挑戰7季用什麼車(漢EV廣州
極限挑戰7季用什麼車(漢EV廣州
  漢EV創世版廣州-陽江往返極限挑戰   實測續航高達701.8km   無懼遠行,即刻出發!      ,
2026-04-02
Copyright 2023-2026 - www.tftnews.com All Rights Reserved