ลูปกลับมาอีกครั้ง 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 จะได้เป็น

Case 1: กรณีหาค่าได้
Case 2: กรณีไม่พบค่าที่ต้องการหา

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

อ่าก็เป็นแนวคิดหนึ่งในการหาข้อมูลนะครับ บางท่านสามารถใช้ SQL หาด้วยวิธีอื่นๆ ก็ได้ มีอีกเยอะมากมายเลยครับ ..แค่ตอนนี้หนุ่มยังไม่รู้ อิอิ —สุดท้ายก็ส่งผ่านแล้ว

ps. ไปเจอมาอีกคิวรี่ที่เซอร์ไพส์ซึ 😲

SELECT 
	(SELECT DISTINCT salary FROM Employee 
	ORDER BY salary Desc LIMIT 1 OFFSET 1) 
	AS SecondHighestSalary

หวังว่าจะเป็นประโยชน์กับผู้อ่านทุกท่านนะครับ คอมเม้นต์ให้คำแนะนำได้นะครับ

แปลผิดแปลถูก + มี typo ขออภัยครับ 🙏 จะพยายามให้ดีขึ้นครับ

.

ขอบคุณครับ



Leave a Reply

Your email address will not be published. Required fields are marked *

Search

About

Feasible เว็บไซต์ที่นำเสนออาชีพปัจจุบันที่เรา (เจ้าของเว็บ) กำลังทำ ไม่ว่าจะเป็น นักวิเคราะห์ข้อมูล นักเรียน นักอ่าน นักฟาร์ม และอีกหลากหลายมุมมอง เรียกได้ว่าเป็น ‘แกงโฮะ’ เลยล่ะ ฮ่าๆๆ ติดตาม Content ที่จะทำออกมาได้เรื่อยๆ นะครับ ขอบคุณที่เข้ามาเยี่ยมกัน 😁✌️

Social Icons