paint-brush
មុខងារ SQL Window: ការពិនិត្យរហ័សជាមួយឧទាហរណ៍ដោយ@luca1iu
ប្រវត្តិសាស្ត្រថ្មី។

មុខងារ SQL Window: ការពិនិត្យរហ័សជាមួយឧទាហរណ៍

ដោយ Luca Liu5m2025/01/05
Read on Terminal Reader

យូរ​ពេក; អាន

មុខងារ Window គឺជាមុខងារដ៏មានអានុភាពនៅក្នុង SQL ដែលប្រើសម្រាប់ធ្វើការគណនានៅទូទាំងជួរដែលទាក់ទងនឹងជួរដេកបច្ចុប្បន្ន។ មិនដូចមុខងារសរុបទេ មុខងារបង្អួចមិនដាក់ជួរជាក្រុមទៅក្នុងលទ្ធផលតែមួយទេ។ ពួកគេត្រឡប់លទ្ធផលសម្រាប់ជួរនីមួយៗ ខណៈពេលដែលរក្សាបរិបទនៃសំណុំទិន្នន័យ។
featured image - មុខងារ SQL Window: ការពិនិត្យរហ័សជាមួយឧទាហរណ៍
Luca Liu HackerNoon profile picture


សេចក្តីផ្តើម

មុខងារ Window គឺជាមុខងារដ៏មានអានុភាពនៅក្នុង SQL ដែលប្រើដើម្បីអនុវត្តការគណនានៅទូទាំងជួរជួរដែលទាក់ទងនឹងជួរដេកបច្ចុប្បន្ន។ មិនដូចមុខងារសរុបទេ មុខងារបង្អួចមិនដាក់ជួរជាក្រុមទៅក្នុងលទ្ធផលតែមួយទេ។ ពួកគេត្រឡប់លទ្ធផលសម្រាប់ជួរនីមួយៗ ខណៈពេលដែលរក្សាបរិបទនៃសំណុំទិន្នន័យ។


នៅក្នុងអត្ថបទនេះ យើងនឹងស្វែងយល់ពីមុខងារបង្អួច SQL ដែលប្រើជាទូទៅមួយចំនួន ( ROW_NUMBER() , RANK() , DENSE_RANK() , NTILE() , LEAD() , និង LAG() ) ជាមួយឧទាហរណ៍។

តារាងគំរូ៖ ទិន្នន័យលក់

យើងនឹងប្រើតារាងលក់ខាងក្រោមដើម្បីបង្ហាញមុខងារបង្អួច៖

លេខសម្គាល់ផ្នែកលក់

លេខសម្គាល់អតិថិជន

ផលិតផល

តំបន់

ចំនួនទឹកប្រាក់

កាលបរិច្ឆេទលក់

១០១

កុំព្យូទ័រយួរដៃ

ខាងជើង

១២០០

2023-01-05

១០២

ថេប្លេត

ខាងជើង

៨០០

2023-02-15

១០៣

ទូរស័ព្ទ

ខាងជើង

៨០០

2023-03-10

១០៤

ថេប្លេត

ខាងជើង

៥០០

2023-04-01

១០៥

កុំព្យូទ័រយួរដៃ

ខាងត្បូង

១៣០០

2023-05-05

១០៦

ថេប្លេត

ខាងត្បូង

៧០០

2023-06-20

១០៧

ទូរស័ព្ទ

ខាងលិច

៩០០

2023-07-15

១០៨

កុំព្យូទ័រយួរដៃ

ខាងកើត

១៣០០

2023-08-10

1. ROW_NUMBER()

អនុគមន៍ ROW_NUMBER() ផ្តល់លេខពិសេសមួយទៅជួរនីមួយៗក្នុងភាគថាស តម្រៀបតាមជួរឈរដែលបានបញ្ជាក់។


កិច្ចការ ៖ កំណត់លេខជួរដេកតែមួយគត់ចំពោះការលក់នីមួយៗនៅក្នុងតំបន់មួយ ដោយផ្អែកលើចំនួនលក់ (ខ្ពស់បំផុតទៅទាបបំផុត)។

 SELECT SalesID, Region, Amount, ROW_NUMBER() OVER (PARTITION BY Region ORDER BY Amount DESC) AS RowNum FROM Sales;

លទ្ធផល

លេខសម្គាល់ផ្នែកលក់

តំបន់

ចំនួនទឹកប្រាក់

ជួរដេក

ខាងជើង

១២០០

ខាងជើង

៨០០

ខាងជើង

៨០០

ខាងជើង

៥០០

ខាងត្បូង

១៣០០

ខាងត្បូង

៧០០

ខាងលិច

៩០០

ខាងកើត

១៣០០

2. ចំណាត់ថ្នាក់()

អនុគមន៍ RANK() ផ្តល់ចំណាត់ថ្នាក់ទៅជួរនីមួយៗក្នុងភាគថាស។ ជួរ​ដេក​ដែល​មាន​តម្លៃ​ដូចគ្នា​ទទួល​បាន​ចំណាត់ថ្នាក់​ដូចគ្នា ហើយ​ចំណាត់ថ្នាក់​បន្ទាប់​ត្រូវ​បាន​រំលង។


កិច្ចការ ៖ ចាត់ថ្នាក់ការលក់នៅក្នុងតំបន់នីមួយៗតាមចំនួន (ខ្ពស់បំផុតទៅទាបបំផុត)។

 SELECT SalesID, Region, Amount, RANK() OVER (PARTITION BY Region ORDER BY Amount DESC) AS Rank FROM Sales;

លទ្ធផល

លេខសម្គាល់ផ្នែកលក់

តំបន់

ចំនួនទឹកប្រាក់

ចំណាត់ថ្នាក់

ខាងជើង

១២០០

ខាងជើង

៨០០

ខាងជើង

៨០០

ខាងជើង

៥០០

ខាងត្បូង

១៣០០

ខាងត្បូង

៧០០

ខាងលិច

៩០០

ខាងកើត

១៣០០

មុខងារសំខាន់

  • សម្រាប់​តំបន់​ខាង​ជើង ទាំង​ចំនួន = 800 ជួរ​ដេក​ចែក​រំលែក​ចំណាត់​ថ្នាក់ 2 ។


  • ចំណាត់ថ្នាក់បន្ទាប់ត្រូវបានរំលង (ឧទាហរណ៍ ចំណាត់ថ្នាក់ទី 3 បានបាត់) ហើយលោតទៅលេខ 4 ។

3. DENSE_RANK()

មុខងារ DENSE_RANK() ផ្តល់ចំណាត់ថ្នាក់ដូចជា RANK() ប៉ុន្តែវាមិនរំលងចំណាត់ថ្នាក់បន្ទាប់ពីទំនាក់ទំនងទេ។


កិច្ចការ ៖ ចាត់ថ្នាក់ក្រាស់ៗដល់ការលក់ក្នុងតំបន់នីមួយៗតាមចំនួន (ខ្ពស់បំផុតទៅទាបបំផុត)។

 SELECT SalesID, Region, Amount, DENSE_RANK() OVER (PARTITION BY Region ORDER BY Amount DESC) AS DenseRank FROM Sales;

លទ្ធផល

លេខសម្គាល់ផ្នែកលក់

តំបន់

ចំនួនទឹកប្រាក់

DenseRank

ខាងជើង

១២០០

ខាងជើង

៨០០

ខាងជើង

៨០០

ខាងជើង

៥០០

ខាងត្បូង

១៣០០

ខាងត្បូង

៧០០

ខាងលិច

៩០០

ខាងកើត

១៣០០

មុខងារសំខាន់

  • សម្រាប់​តំបន់​ខាង​ជើង ទាំង​ចំនួន = 800 ជួរ​ដេក​ចែក​រំលែក​ចំណាត់​ថ្នាក់ 2 ។


  • ចំណាត់​ថ្នាក់​បន្ទាប់​គឺ 3 ដោយ​មិន​មាន​ការ​រំលង​នៃ​ចំណាត់​ថ្នាក់។

4. NTILE()

NTILE() បែងចែកជួរដេកទៅជាចំនួនជាក់លាក់នៃក្រុមប្រហាក់ប្រហែល។


កិច្ចការ ៖ ចែកការលក់ទាំងអស់ជា ៤ក្រុម ដោយផ្អែកលើចំនួនតាមលំដាប់ចុះ។

 SELECT SalesID, Amount, NTILE(4) OVER (ORDER BY Amount DESC) AS Quartile FROM Sales;

លទ្ធផល

លេខសម្គាល់ផ្នែកលក់

ចំនួនទឹកប្រាក់

ត្រីមាស

១៣០០

១៣០០

១២០០

៩០០

៨០០

៨០០

៥០០

៧០០

5. ដឹកនាំ()

LEAD() ទាញយកតម្លៃពីជួរបន្ទាប់ក្នុងភាគថាសដូចគ្នា។


កិច្ចការ ៖ ប្រៀបធៀបចំនួនលក់នីមួយៗទៅនឹងចំនួនលក់បន្ទាប់ ដែលបញ្ជាដោយ SaleDate ។

 SELECT SalesID, Amount, LEAD(Amount) OVER (ORDER BY SaleDate) AS NextAmount FROM Sales;

លទ្ធផល

លេខសម្គាល់ផ្នែកលក់

ចំនួនទឹកប្រាក់

ចំនួនទឹកប្រាក់បន្ទាប់

១២០០

៨០០

៨០០

៨០០

៨០០

៥០០

៥០០

១៣០០

១៣០០

៧០០

៧០០

៩០០

៩០០

១៣០០

១៣០០

NULL

6. LAG()

LAG() ទាញយកតម្លៃពីជួរមុនក្នុងភាគថាសដូចគ្នា។


កិច្ចការ ៖ ប្រៀបធៀបចំនួនលក់នីមួយៗទៅនឹងចំនួនលក់មុន ដែលបញ្ជាដោយ SaleDate ។

 SELECT SalesID, Amount, LAG(Amount) OVER (ORDER BY SaleDate) AS PrevAmount FROM Sales;

លទ្ធផល

លេខសម្គាល់ផ្នែកលក់

ចំនួនទឹកប្រាក់

បរិមាណមុន។

១២០០

NULL

៨០០

១២០០

៨០០

៨០០

៥០០

៨០០

១៣០០

៥០០

៧០០

១៣០០

៩០០

៧០០

១៣០០

៩០០

សេចក្តីសន្និដ្ឋាន

មុខងារបង្អួច SQL ដូចជា ROW_NUMBER(), RANK(), DENSE_RANK(), NTILE(), LEAD(), និង LAG() ផ្តល់នូវវិធីដ៏មានអានុភាពក្នុងការវិភាគទិន្នន័យនៅក្នុងភាគថាស។


គន្លឹះសំខាន់ៗ៖

  • ROW_NUMBER() កំណត់អត្តសញ្ញាណតែមួយគត់សម្រាប់ជួរនីមួយៗ។
  • RANK() និង DENSE_RANK() ខុសគ្នានៅក្នុងរបៀបដែលពួកគេគ្រប់គ្រងទំនាក់ទំនង (រំលងធៀបនឹងការមិនរំលង)។
  • NTILE() មានប្រយោជន៍សម្រាប់ការបែងចែកជួរដេកទៅជាក្រុមស្ថិតិ។
  • LEAD() និង LAG() អនុញ្ញាតឱ្យមានការប្រៀបធៀបជាមួយជួរដែលនៅជាប់គ្នា។


តាមរយៈការធ្វើជាម្ចាស់នៃមុខងារទាំងនេះ អ្នកអាចគ្រប់គ្រងការវិភាគដ៏ស្មុគស្មាញ និងកិច្ចការចំណាត់ថ្នាក់ប្រកបដោយប្រសិទ្ធភាព!


សូម​អរគុណ​សម្រាប់​ការ​ចំណាយ​ពេល​ដើម្បី​ស្វែង​រក​ការ​យល់​ដឹង​ដែល​ទាក់ទង​នឹង​ទិន្នន័យ​ជាមួយ​ខ្ញុំ។ ខ្ញុំសូមកោតសរសើរចំពោះការចូលរួមរបស់អ្នក។ ប្រសិនបើអ្នកយល់ថាព័ត៌មាននេះមានប្រយោជន៍ ខ្ញុំសូមអញ្ជើញអ្នកឱ្យតាមដានខ្ញុំ ឬភ្ជាប់ជាមួយខ្ញុំនៅលើ LinkedIn ។ រីករាយក្នុងការរុករក!👋

L O A D I N G
. . . comments & more!

About Author

Luca Liu HackerNoon profile picture
Luca Liu@luca1iu
Hello there! 👋 I'm Luca, a BI Developer with a passion for all things data, Proficient in Python, SQL and Power BI

ព្យួរស្លាក

អត្ថបទនេះត្រូវបានបង្ហាញនៅក្នុង...