首页
/
每日頭條
/
圖文
/
王富貴的真實姓名
王富貴的真實姓名
更新时间:2026-01-31 17:43:15

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

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

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

方案:

首先給出數據建表腳本(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
推荐阅读
索尼psvita能玩什麼遊戲(索尼PSVita終告破解可惜來晚了)
索尼psvita能玩什麼遊戲(索尼PSVita終告破解可惜來晚了)
  據日本媒體報道,索尼PS Vita在5年前正式上市,由于使用了封閉的聯網操作系統和專用的存儲卡,一直以來都是破解方面的老大難。而現在,PS Vita的系統和存儲卡已經被徹底破解。哎!這一等就是五年。      索尼PS Vita終告破解(圖片來自cnbeta)   在前,雖有暫時性的破解方法,使其可以運行PSP遊戲和自制軟件,但每次都是在系統升級後失效。...
2026-01-31
泡面創始人吳百福的勵志故事(34方便面之父)
泡面創始人吳百福的勵志故事(34方便面之父)
  衆所周知方便面是風靡全球的一種既美味又快捷的速食食品,這種方便食品的發明造福了忙碌的上班族和奔波的旅客們。輕便易攜的重量和僅需要熱水就可以加工的簡單操作,讓這些行色匆匆的人在緊張的工作和疲憊的旅行過程中,能夠吃上一口熱乎的湯面。   享受着方便面帶來的一切便利時,我們都要感謝它的發明者:方便面之父安藤百福。從發明者的名字看來,這是一個日本名字,事實上方便...
2026-01-31
steam求生之路2能氪金嗎(利益與良知的艱難選擇)
steam求生之路2能氪金嗎(利益與良知的艱難選擇)
  不知道大家還記不記得冒險解謎獨立遊戲《旁觀者》?反烏托邦題材的解謎遊戲,加上無處不在的監視與道德抉擇,選擇當好人自己就要死,當壞人卻又良心上過不去,玩過的小夥伴估計都非常印象深刻。這款備受好評的《旁觀者》官方微博宣布,《旁觀者2(Beholder 2)》的制作已經全面展開,并且遊戲已經在Steam上架,預計2018年發售,移動端也有可能跟上哦~     ...
2026-01-31
紫霞仙子沒能等到齊天大聖(紫霞仙子也沒等來的大英雄)
紫霞仙子沒能等到齊天大聖(紫霞仙子也沒等來的大英雄)
     "我知道有一天他會在一個萬衆矚目的情況下出現,身披金甲聖衣,腳踏七色雲彩來娶我。"   對《鳴鴻傳》中的王詩詩來說,這個人本不該是劉星雨。難以攀折的高齡之花,秋水閣的花魁,也是汴安第一美女的王詩詩無疑是一個令所有男人傾心的女子,她臉上的神情總是淡,七情上臉的都是小孩子,而她又像一個純真生動的小女孩,憧憬愛情,珍愛美貌,會對鏡自憐:"這世上真的有向你...
2026-01-31
這首歌是根據什麼歌曲改編的(這首周星馳寫的歌)
這首歌是根據什麼歌曲改編的(這首周星馳寫的歌)
     周星馳,一個被喜劇天賦所耽誤的天才音樂人。   他被很多喜愛他的影迷親切地稱為“星爺”,一是因為他現在年紀确實不小了,二是他在電影圈的地位确實挺高的,所以“星爺”二字的尊稱也算當之無愧。然而很多人都知道他是公認的香港喜劇之王,卻不知道原來擅長搞笑的周星星同學,原來還是一個出色的音樂人。      周星馳寫過一首歌,即電影《美人魚》的宣傳曲兼插曲《無...
2026-01-31
Copyright 2023-2026 - www.tftnews.com All Rights Reserved