
HackerRank - The PADS 這道題目可以說是很典型的 字串處理 和 分組計數 題型。這篇就來拆解這道題目,從題目概述、輸入格式、輸出格式到 SQL 解法,一步步分析如何解決這道題目。(本篇以MS SQL Server語法教學)
題目概述
從 OCCUPATIONS
表中生成以下兩個結果:- 輸出姓名列表,但要加上對應職業的首字母,例如
Jane(A)
,Jenny(D)
。 - 統計每種職業的數量,並按照特定格式輸出,例如:
There are a total of X doctors.
- 排序規則:
- 第一部分根據
Name
升序排序。 - 第二部分先按 職業出現次數升序,如果次數相同,再按照 職業名稱的字母順序 排列。
- 第一部分根據
Input 格式
OCCUPATIONS
表的結構如下:

OCCUPATIONS
表中包含以下數據 (範例):

Name
:員工姓名Occupation
:職業(Doctor
,Professor
,Singer
,Actor
)
Output 格式
查詢結果需要拆成兩個部分輸出:
第一部分:姓名列表 + 職業首字母
Ashley(P)
Christeen(P)
Jane(A)
Jenny(D)
Julia(A)
Ketty(P)
Maria(A)
Meera(S)
Priya(S)
Samantha(D)
這部分按照 Name
升序排列,並將職業首字母加到姓名後。
第二部分:統計職業數量
There are a total of 2 doctors.
There are a total of 2 singers.
There are a total of 3 actors.
There are a total of 3 professors.
這部分根據職業的數量 升序排序,如果數量相同,則按照 職業名稱字母順序 排列。
SQL 解法
第一部分:姓名 + 職業首字母
這部分需要 字串拼接 (+
),並按照 Name
排序:
SELECT Name + '(' + LEFT(Occupation,1) + ')'
FROM OCCUPATIONS
ORDER BY Name;
關鍵點
LEFT(Occupation,1)
:取得職業的第一個字母。+
:在 SQL Server 中,+
用來拼接字串。ORDER BY Name
:確保結果按照姓名 升序排序。
第二部分:統計職業數量
這部分需要 COUNT(*) + GROUP BY
,並將結果格式化:
SELECT 'There are a total of ' + CAST(COUNT(*) AS NVARCHAR(10)) + ' ' + LOWER(OCCUPATION) + 's.'
FROM OCCUPATIONS
GROUP BY OCCUPATION
ORDER BY COUNT(*), OCCUPATION;
關鍵點
COUNT(*)
:計算該職業出現的次數。CAST(COUNT(*) AS NVARCHAR(10))
:確保數字能正確與字串拼接。LOWER(OCCUPATION)
:將職業名稱轉為小寫,符合題目格式。ORDER BY COUNT(*), OCCUPATION
:先按職業數量排序,數量相同時按字母順序排序。
謝謝您花時間將此篇文章讀完,若覺得對您有幫助可以幫忙按個讚、分享來或是珍藏喔!也歡迎Follow我的Threads/ FB,持續追蹤生產力工具、商業分析、商業英文的實用範例,提升自己的職場力喔!