ลูปกลับมาอีกครั้ง Leet The Series คราวนี้เลือกระดับ intermediate กลางๆ ดู จากโจทย์นะฮะ นึกถึงเพลงเก่าขึ้นเลยทันที (รู้เลยว่าอยู่ยุคไหน ม่ายน้า 😁) หลังจากพยายามอยู่นานมากไม่สำเร็จ ฮ่าๆๆ คือเราแก้ objective แรกได้ แต่ไม่ผ่านข้อสองอะ โจทย์เป็นไง ไปดูกัน
หัวข้อนี้ 176. Second Highest Salary
Table: Employee
+-------------+------+
| Column Name | Type |
+-------------+------+
| id | int |
| salary | int |
+-------------+------+
- id is the primary key (column with unique values) for this table.
- Each row of this table contains information about the salary of an employee.
Write a solution to find the second highest distinct salary from the Employee table. If there is no second highest salary, return null.
ฉันเต็มใจขอเป็นแค่ที่สอง 🎶 .. เดี๋ยวก๊อนน เค้าต้องการเงินเดือนที่มากสุดอันดับสอง ไม่พอถ้าไม่มีที่สองให้ส่ง NULL มาครับ
ตอนแรกคิดว่ากินหมูแล้วครับ สุดท้ายไม่หมูอ่า
The result format is in the following example.
Example 1:
Input:
Employee table:
+----+--------+
| id | salary |
+----+--------+
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
+----+--------+
Output:
+---------------------+
| SecondHighestSalary |
+---------------------+
| 200 |
+---------------------+
Example 2:
Input:
Employee table:
+----+--------+
| id | salary |
+----+--------+
| 1 | 100 |
+----+--------+
Output:
+---------------------+
| SecondHighestSalary |
+---------------------+
| null |
+---------------------+
ตอนแรกหนุ่มก็คิวรี่ออกมาเหมือนคุณ GORAGOD.com เลยครับ แต่ไม่ผ่านเงื่อนไขข้อสองที่ต้องส่ง NULL กลับมา

พลิกโค้ดอยู่หลายรอบแล้ว … “ไม่ล้ายย” เสียงเจ้แต๋ว เลยต้องพลิกไปดู solution ที่เค้าแก้ปัญหานี้กัน คุณพระ เค้าใช้แค่ max()
ตกผลึกได้ว่า หนุ่มไม่รู้ที่ว่า max() จะส่งค่า NULL กลับมา หากไม่มีผลลัพธ์ที่เป็นค่าสูงสุด แค่รู้ว่า max ก็คือส่งคืนค่าสูงสุดเท่านั้น ซึ่ง solution ที่แก้ได้คือ
select max(salary) as SecondHighestSalary
from employee
where salary < (select max(salary) from employee)
พอวาดเป็น flow จะได้เป็น


ได้ผลลัพธ์แล้วแบบนี้

อ่าก็เป็นแนวคิดหนึ่งในการหาข้อมูลนะครับ บางท่านสามารถใช้ SQL หาด้วยวิธีอื่นๆ ก็ได้ มีอีกเยอะมากมายเลยครับ ..แค่ตอนนี้หนุ่มยังไม่รู้ อิอิ —สุดท้ายก็ส่งผ่านแล้ว
ps. ไปเจอมาอีกคิวรี่ที่เซอร์ไพส์ซึ 😲
SELECT
(SELECT DISTINCT salary FROM Employee
ORDER BY salary Desc LIMIT 1 OFFSET 1)
AS SecondHighestSalary
หวังว่าจะเป็นประโยชน์กับผู้อ่านทุกท่านนะครับ คอมเม้นต์ให้คำแนะนำได้นะครับ
แปลผิดแปลถูก + มี typo ขออภัยครับ 🙏 จะพยายามให้ดีขึ้นครับ
.
ขอบคุณครับ






