شعار زيفيرنت

تحليل DENSE_RANK(): دليل خطوة بخطوة لعشاق SQL - KDnuggets

التاريخ:

كسر DENSE_RANK (): دليل خطوة بخطوة لعشاق SQL
الصورة بواسطة المحرر
 

في عالم اليوم الذي يعتمد على البيانات، تقف SQL (لغة الاستعلام الهيكلية) بمثابة حجر الزاوية لإدارة أنظمة قواعد البيانات ومعالجتها. يكمن أحد المكونات الأساسية لقوة ومرونة SQL في وظائف النافذة، فئة من الوظائف التي تقوم بإجراء العمليات الحسابية عبر مجموعات من الصفوف المرتبطة بالصف الحالي.

تخيل أنك تنظر إلى بياناتك من خلال نافذة منزلقة، واستنادًا إلى موضع هذه النافذة وحجمها، يمكنك إجراء عمليات حسابية أو تحويلات على بياناتك. هذا هو ما تفعله وظائف نافذة SQL بشكل أساسي. إنهم يتعاملون مع مهام مثل حساب الإجماليات أو المتوسطات أو التصنيفات الجارية، والتي يصعب تنفيذها باستخدام أوامر SQL القياسية.

إحدى أقوى الأدوات في صندوق أدوات وظائف النافذة هي وظيفة التصنيف، وتحديدًا وظيفة التصنيف DENSE_RANK() وظيفة. تعتبر هذه الوظيفة بمثابة هبة من السماء لمحللي البيانات، حيث تسمح لنا بترتيب صفوف مختلفة من البيانات دون أي ثغرات. سواء كنت تبحث في أرقام المبيعات، أو بيانات حركة المرور على موقع الويب، أو حتى قائمة بسيطة من نتائج اختبارات الطلاب، DENSE_RANK() لا غنى عنه.

في هذه المقالة، سوف نتعمق في العمل الداخلي DENSE_RANK()، جنبًا إلى جنب مع إخوتها المقربين RANK() و ROW_NUMBER()وإظهار كيفية تجنب المخاطر الشائعة التي قد تعوقك في رحلة SQL الخاصة بك. هل أنت مستعد لرفع مستوى مهاراتك في تحليل البيانات؟ دعونا نتعمق.

وظائف التصنيف في SQL هي مجموعة فرعية من وظائف النافذة التي تقوم بتعيين تصنيف فريد لكل صف ضمن مجموعة النتائج. تتوافق قيم التصنيف هذه مع ترتيب معين، يتم تحديده بواسطة جملة ORDER BY داخل الوظيفة. وظائف التصنيف هي الدعامة الأساسية لـ SQL، وتستخدم على نطاق واسع في تحليل البيانات لمهام متنوعة، مثل العثور على أفضل مندوب مبيعات، أو تحديد صفحة الويب الأفضل أداءً، أو تحديد الفيلم الأعلى ربحًا لسنة معينة.

هناك ثلاث وظائف التصنيف الرئيسية في SQL، وهي RANK(), ROW_NUMBER()و DENSE_RANK(). تعمل كل من هذه الوظائف بشكل مختلف قليلاً، ولكنها جميعها تخدم الغرض المشترك المتمثل في تصنيف البيانات بناءً على شروط محددة. RANK() و DENSE_RANK() الوظائف لها سلوك مماثل من حيث أنها تقوم بتعيين نفس الترتيب للصفوف ذات القيم المتطابقة. يكمن الاختلاف الحاسم في كيفية تعاملهم مع الرتبة اللاحقة. RANK() يتخطى المرتبة التالية في حين DENSE_RANK() لا.

من ناحية أخرى، ROW_NUMBER() تقوم الدالة بتعيين رقم صف فريد لكل صف بغض النظر عما إذا كان الترتيب حسب قيم الأعمدة متطابقًا. بينما RANK(), DENSE_RANK()و ROW_NUMBER() قد تبدو قابلة للتبديل في لمحة واحدة، إلا أن فهم الفروق الدقيقة فيها أمر محوري لتحليل البيانات الفعال في SQL. يمكن أن يؤثر الاختيار بين هذه الوظائف بشكل كبير على نتائجك والرؤى المستمدة من بياناتك.

DENSE_RANK() هي وظيفة تصنيف قوية في SQL تقوم بتعيين قيمة تصنيف فريدة داخل قسم محدد. في صلب الموضوع، DENSE_RANK() يعطي تصنيفات غير فاصلة لبياناتك، مما يعني أن كل قيمة فريدة يتم منحها تصنيفًا مميزًا، وتتلقى القيم المتطابقة نفس التصنيف. على عكس نظيرتها RANK(), DENSE_RANK() لا يتم تخطي أي صفوف إذا كان هناك ارتباط بين القيم.

لتقسيمها، دعنا نتصور سيناريو حيث يكون لديك مجموعة بيانات من درجات الطلاب، وقد حصل ثلاثة طلاب على نفس النتيجة، على سبيل المثال، 85 درجة. استخدام RANK()، سيحصل جميع الطلاب الثلاثة على المرتبة 1، لكن أفضل نتيجة تالية ستكون في المرتبة 4، متخطيين المرتبتين 2 و3. ومع ذلك، DENSE_RANK() يتعامل مع هذا بشكل مختلف. سيتم تعيين رتبة 1 لجميع الطلاب الثلاثة، وستحصل أفضل نتيجة تالية على رتبة 2، مما يضمن عدم وجود فجوة في الترتيب.

لذلك، متى ينبغي للمرء أن يستخدم DENSE_RANK()؟ إنه مفيد بشكل خاص في السيناريوهات التي تحتاج فيها إلى تصنيف مستمر دون أي ثغرات. فكر في حالة استخدام حيث تحتاج إلى منح أفضل ثلاثة فنانين. إذا كانت لديك روابط في بياناتك، فاستخدم RANK() قد يقودك إلى تفويت منح المرشح المستحق. هذا عندما DENSE_RANK() يأتي للإنقاذ، مما يضمن حصول جميع الهدافين على التقدير الواجب، وعدم تخطي التصنيفات.

فهم الاختلافات بين DENSE_RANK(), RANK()و ROW_NUMBER() ضروري لتحليل البيانات بكفاءة في SQL. تعتبر الوظائف الثلاث جميعها قوية في حد ذاتها، ولكن الاختلافات الدقيقة بينها يمكن أن تؤثر بشكل كبير على نتائج تحليل بياناتك.

دعنا نبدء ب RANK(). تقوم هذه الوظيفة بتعيين تصنيف فريد لكل قيمة مميزة ضمن مجموعة البيانات، مع تعيين نفس الترتيب لقيم متطابقة. رغم ذلك، متى RANK() إذا واجه ربطة عنق (قيم متطابقة)، فإنه يتخطى الترتيب (الرتب) التالي في التسلسل. على سبيل المثال، إذا كان لديك ثلاثة منتجات لها نفس أرقام المبيعات، RANK() سيتم تعيين نفس الترتيب لكل منتج من هذه المنتجات ولكن بعد ذلك سيتم تخطي الترتيب التالي. وهذا يعني أنه إذا كانت هذه المنتجات الثلاثة هي المنتجات الأكثر مبيعًا، فسيتم تعيينها جميعًا بالمرتبة 1، ولكن المنتج التالي الأكثر مبيعًا سيتم تعيينه بالمرتبة 4، وليس بالمرتبة 2.

بعد ذلك ، دعنا نفكر DENSE_RANK(). مشابه ل RANK(), DENSE_RANK() يعين نفس الرتبة لقيم متطابقة، لكنه لا يتخطى أي رتب. باستخدام المثال السابق، مع DENSE_RANK()، سيتم تعيين المنتجات الثلاثة الأكثر مبيعًا بالمرتبة 1، ولكن المنتج التالي الأكثر مبيعًا سيتم تعيينه بالمرتبة 2، وليس بالمرتبة 4.

وأخيرا، ROW_NUMBER() يأخذ نهجا مختلفا. فهو يعين تصنيفًا فريدًا لكل صف، بغض النظر عما إذا كانت القيم متطابقة أم لا. وهذا يعني أنه حتى لو كانت ثلاثة منتجات لها نفس أرقام المبيعات، ROW_NUMBER() سيتم تعيين رقم فريد لكل صف، مما يجعله مثاليًا للمواقف التي تحتاج فيها إلى تعيين معرف مميز لكل صف.

بناء جملة DENSE_RANK() هو واضح ومباشر. يتم استخدامه بالتزامن مع OVER() جملة، تقسيم البيانات قبل تعيين الرتب. بناء الجملة هو كما يلي: DENSE_RANK() OVER (ORDER BY column). هنا، column يشير إلى العمود الذي تريد تصنيف بياناتك من خلاله. دعونا نفكر في مثال حيث لدينا جدول اسمه Sales مع الأعمدة SalesPerson و SalesFigures. لتصنيف مندوبي المبيعات حسب أرقام مبيعاتهم، سوف نستخدم DENSE_RANK() تعمل على النحو التالي: DENSE_RANK() OVER (ORDER BY SalesFigures DESC). سيقوم استعلام SQL هذا بتصنيف مندوبي المبيعات من الأعلى إلى الأدنى بناءً على أرقام مبيعاتهم.

باستخدام DENSE_RANK() بالتزامن مع PARTITION BY يمكن أن تكون ثاقبة بشكل خاص. على سبيل المثال، إذا كنت تريد تصنيف مندوبي المبيعات داخل كل منطقة، فيمكنك تقسيم بياناتك حسب Region ومن ثم الترتيب داخل كل قسم. بناء الجملة لهذا سيكون DENSE_RANK() OVER (PARTITION BY Region ORDER BY SalesFigures DESC). وبهذه الطريقة، لن تحصل على تصنيف شامل فحسب، بل ستحصل أيضًا على فهم دقيق للأداء داخل كل منطقة.

سؤال Apple SQL: ابحث عن أفضل أداء للمبيعات لكل تاريخ مبيعات

الجدول: sales_data

+------------+-----------+------------+
|employee_id | sales_date| total_sales|
+------------+-----------+------------+
|101         |2024-01-01 |500         |
|102         |2024-01-01 |700         |
|103         |2024-01-01 |600         |
|101         |2024-01-02 |800         |
|102         |2024-01-02 |750         |
|103         |2024-01-02 |900         |
|101         |2024-01-03 |600         |
|102         |2024-01-03 |850         |
|103         |2024-01-03 |700         |
+------------+-----------+------------+

 

الناتج

+------------+-----------+------------+
|employee_id | sales_date| total_sales|
+------------+-----------+------------+
|101         |2024-01-01 |800         |
|103         |2024-01-02 |900         |
|102         |2024-01-03 |850         |
+------------+-----------+------------+

حل Apple لأفضل أداء للمبيعات

الخطوة 1: فهم البيانات

أولاً، دعونا نفهم البيانات الموجودة في جدول sales_data. يحتوي على ثلاثة أعمدة: معرف_الموظف، وتاريخ_المبيعات، وإجمالي_المبيعات. يمثل هذا الجدول بيانات المبيعات مع معلومات عن الموظف وتاريخ البيع وإجمالي مبلغ المبيعات.

الخطوة 2: تحليل وظيفة DENSE_RANK()

يستخدم الاستعلام وظيفة نافذة DENSE_RANK() لتصنيف الموظفين بناءً على إجمالي مبيعاتهم ضمن كل قسم من أقسام تاريخ المبيعات. يتم استخدام DENSE_RANK() لتعيين رتبة لكل صف داخل قسم sales_date، مع الترتيب بناءً على إجمالي المبيعات بترتيب تنازلي.

الخطوة 3: تقسيم بنية الاستعلام

الآن، دعونا نحلل بنية الاستعلام:

SELECT 
  employee_id, 
  sales_date, 
  total_sales 
FROM 
  (
    SELECT 
      employee_id, 
      sales_date, 
      total_sales, 
      DENSE_RANK() OVER (
        PARTITION BY sales_date 
        ORDER BY 
          total_sales DESC
      ) AS sales_rank 
    FROM 
      sales_data
  ) ranked_sales 
WHERE 
  sales_rank = 1;

 

  • جملة التحديد: تحدد الأعمدة التي سيتم تضمينها في النتيجة النهائية. في هذه الحالة، هو "معرف_الموظف" و"تاريخ_المبيعات" و"إجمالي_المبيعات".
  • من البند: هذا هو المكان الذي تأتي منه البيانات الفعلية. ويتضمن استعلامًا فرعيًا (محاطًا بين قوسين) يحدد أعمدة من جدول sales_data ويضيف عمودًا محسوبًا باستخدام DENSE_RANK().
  • دالة DENSE_RANK(): يتم استخدام هذه الوظيفة داخل الاستعلام الفرعي لتعيين رتبة لكل صف بناءً على عمود Total_sales، ويتم تقسيمها حسب تاريخ_المبيعات. وهذا يعني أن الترتيب يتم بشكل منفصل لكل تاريخ مبيعات.
  • "أين البند": يؤدي هذا إلى تصفية النتائج لتشمل فقط الصفوف التي يكون فيها sales_rank يساوي 1. ويضمن ذلك تضمين النتيجة النهائية فقط صاحب الأداء الأعلى في المبيعات لكل تاريخ مبيعات.

الخطوة 4: تنفيذ الاستعلام

عند تنفيذ هذا الاستعلام، فإنه سينتج مجموعة نتائج تتضمن معرف_الموظف، وتاريخ_المبيعات، وإجمالي_المبيعات لأفضل أداء للمبيعات في كل تاريخ مبيعات.

الخطوة 5: مراجعة الإخراج

سيحتوي جدول المخرجات النهائي، المسمى top_performers، على المعلومات المطلوبة: صاحب أعلى أداء في المبيعات لكل تاريخ مبيعات، استنادًا إلى حساب DENSE_RANK()

سؤال Google SQL: ابحث عن العميل الذي قدم أعلى نقاط مراجعة لكل منتج

الجدول: مراجعات المنتج

+------------+-----------+-------------+-------------------------------+
|customer_id | product_id| review_date | review_score | helpful_votes  |
+------------+-----------+-------------+--------------+----------------+
|301         |101        |2024-04-01   |4.5           | 12             |
|302         |102        |2024-04-01   |3.8           | 8              |
|303         |103        |2024-04-01   |4.2           | 10             |
|301         |101        |2024-04-02   |4.8           | 15             |
|302         |102        |2024-04-02   |3.5           | 7              |
|303         |103        |2024-04-02   |4.0           | 11             |
|301         |101        |2024-04-03   |4.2           | 13             |
|302         |102        |2024-04-03   |4.0           | 10             |
|303         |103        |2024-04-03   |4.5           | 14             |
+------------+-----------+-------------+--------------+----------------+

 

الناتج

+------------+-----------+-------------+--------------+----------------+
|customer_id | product_id| review_date | review_score | helpful_votes  |
+------------+-----------+-------------+--------------+----------------+
|301         |101        |2024-04-01   |4.5           | 12             |
|301         |101        |2024-04-02   |4.8           | 15             |
|303         |103        |2024-04-03   |4.5           | 14             |
+------------+-----------+-------------+--------------+----------------+

جوجل أعلى حل نقاط المراجعة

الخطوة 1: فهم البيانات

يحتوي جدول Product_reviews على معلومات حول مراجعات العملاء لمختلف المنتجات. ويتضمن أعمدة مثل customer_id، وproduct_id، وreview_date، وreview_score، وhelp_votes. يمثل هذا الجدول البيانات المتعلقة بمراجعات العملاء، مع تفاصيل حول العميل والمنتج قيد المراجعة وتاريخ المراجعة ونقاط المراجعة وعدد الأصوات المفيدة التي تم تلقيها.

الخطوة 2: تحليل وظيفة DENSE_RANK()

في هذا الاستعلام، يتم استخدام وظيفة نافذة DENSE_RANK() لترتيب الصفوف داخل كل قسم محدد بواسطة Product_id وreview_date. يتم تحديد الترتيب بناءً على معيارين: review_score بترتيب تنازلي وhelp_votes بترتيب تنازلي. وهذا يعني أنه سيتم تعيين الصفوف ذات درجات المراجعة الأعلى وعدد أكبر من الأصوات المفيدة إلى مراتب أقل.

الخطوة 3: تقسيم بنية الاستعلام

الآن، دعونا نحلل بنية الاستعلام:

SELECT 
  customer_id, 
  product_id, 
  review_date, 
  review_score, 
  helpful_votes 
FROM 
  (
    SELECT 
      customer_id, 
      product_id, 
      review_date, 
      review_score, 
      helpful_votes, 
      DENSE_RANK() OVER (
        PARTITION BY product_id, 
        review_date 
        ORDER BY 
          review_score DESC, 
          helpful_votes DESC
      ) AS rank_within_product 
    FROM 
      product_reviews
  ) ranked_reviews 
WHERE 
  rank_within_product = 1;

 

  • جملة التحديد: تحدد الأعمدة التي سيتم تضمينها في النتيجة النهائية. وهي تتضمن معرف_المنتج، ومعرف_المنتج، وتاريخ_المراجعة، ونقاط_المراجعة، والأصوات_المساعدة.
  • من البند: يتضمن هذا الجزء استعلامًا فرعيًا (محاطًا بين قوسين) يحدد أعمدة من جدول Product_reviews ويضيف عمودًا محسوبًا باستخدام DENSE_RANK(). يتم إجراء الحساب على قسم محدد بواسطة Product_id وreview_date، ويعتمد الترتيب على كل من review_score وhelp_votes بترتيب تنازلي.
  • دالة DENSE_RANK(): يتم تطبيق هذه الوظيفة ضمن الاستعلام الفرعي لتعيين رتبة لكل صف بناءً على المعايير المحددة. ويتم الترتيب بشكل منفصل لكل مجموعة من Product_id وreview_date.
  • "أين البند": يقوم بتصفية النتائج لتشمل فقط الصفوف التي يكون فيها rank_within_product يساوي 1. ويضمن هذا تضمين الصف الأعلى تصنيفًا فقط لكل منتج في كل تاريخ مراجعة في النتيجة النهائية.

الخطوة 4: تنفيذ الاستعلام

سيؤدي تنفيذ هذا الاستعلام إلى إنتاج مجموعة نتائج تحتوي على المعلومات المطلوبة: customer_id، وproduct_id، وreview_date، وreview_score، وhelp_votes للمراجعة ذات التصنيف الأعلى بناءً على كل من نقاط المراجعة والأصوات المفيدة داخل كل منتج وتاريخ المراجعة.

الخطوة 5: مراجعة الإخراج

سيعرض جدول المخرجات النهائي، المسمى top_reviewers، التقييمات الأعلى تصنيفًا لكل منتج في كل تاريخ مراجعة، مع الأخذ في الاعتبار كلاً من درجة المراجعة وعدد الأصوات المفيدة.

بينما DENSE_RANK() هي وظيفة مفيدة للغاية في SQL، وليس من غير المألوف أن يرتكب المحللون، وخاصة الجدد في SQL، أخطاء عند استخدامها. دعونا نلقي نظرة فاحصة على بعض هذه الأخطاء الشائعة وكيفية تجنبها.

أحد الأخطاء الشائعة هو سوء فهم كيف DENSE_RANK() يعالج القيم الخالية. على عكس بعض وظائف SQL، DENSE_RANK() يعامل كافة القيم الخالية على أنها متطابقة. وهذا يعني أنه إذا كنت تقوم بتصنيف البيانات حيث تكون بعض القيم فارغة، DENSE_RANK() سيتم تعيين نفس الترتيب لجميع القيم NULL. ضع في اعتبارك ذلك عند العمل مع مجموعات البيانات التي تحتوي على قيم فارغة، وفكر في استبدال القيم الخالية بقيمة تمثل معناها في السياق الخاص بك، أو استبعادها وفقًا لمتطلباتك المحددة.

هناك خطأ شائع آخر وهو إغفال أهمية التقسيم عند الاستخدام DENSE_RANK(). تسمح لك جملة `PARTITION BY` بتقسيم بياناتك إلى أجزاء مميزة وإجراء الترتيب داخل هذه الأقسام. يمكن أن يؤدي إهمال استخدام `PARTITION BY` إلى نتائج خاطئة، خاصة عندما تريد إعادة تشغيل التصنيفات لفئات أو مجموعات مختلفة.

ويرتبط بهذا الاستخدام غير السليم لل ORDER BY شرط مع DENSE_RANK(). DENSE_RANK() يعين الرتب بترتيب تصاعدي افتراضيًا، مما يعني أن أصغر قيمة تحصل على المرتبة 1. إذا كنت تريد أن يكون الترتيب بترتيب تنازلي، فيجب عليك تضمين الكلمة الأساسية `DESC` في ORDER BY بند. سيؤدي الفشل في القيام بذلك إلى تصنيفات قد لا تتوافق مع توقعاتك.

وأخيرا، يستخدم بعض المحللين خطأ DENSE_RANK() أين ROW_NUMBER() or RANK() ربما يكون أكثر ملاءمة، والعكس صحيح. وكما ناقشنا، فإن جميع هذه الوظائف الثلاث لها سلوكيات فريدة. يعد فهم هذه الفروق الدقيقة واختيار الوظيفة الصحيحة لحالة الاستخدام المحددة أمرًا بالغ الأهمية لإجراء تحليل دقيق وفعال للبيانات.

كيف يؤدي إتقان DENSE_RANK() إلى تحسين كفاءة تحليل البيانات في SQL

إتقان استخدام DENSE_RANK() يمكن أن يعزز بشكل كبير كفاءة تحليل البيانات في SQL، خاصة عندما يتعلق الأمر بالتصنيفات والمقارنات. توفر هذه الوظيفة نهجًا دقيقًا للتصنيف، وهو نهج يحافظ على الاستمرارية في مقياس التصنيف عن طريق تعيين نفس التصنيف لقيم متطابقة دون تخطي أي أرقام تصنيف.

وهذا مفيد بشكل خاص في تحليل مجموعات البيانات الكبيرة، حيث يمكن لنقاط البيانات في كثير من الأحيان مشاركة قيم متطابقة. على سبيل المثال، في مجموعة بيانات المبيعات، قد يكون العديد من مندوبي المبيعات قد حققوا نفس أرقام المبيعات. DENSE_RANK() يتيح تصنيفًا عادلاً، حيث يتم تعيين نفس الرتبة لكل من مندوبي المبيعات هؤلاء. بالإضافة إلى ذلك، فإن استخدام DENSE_RANK() بالتزامن مع `PARTITION BY` يسمح بتحليل مركّز خاص بالفئة.

يصبح تطبيق هذه الوظيفة أكثر فعالية عند التعامل مع القيم الخالية. وبدلاً من استبعادهم من عملية التصنيف، DENSE_RANK() يعامل جميع القيم الخالية على أنها متطابقة ويعين لها نفس الترتيب. وهذا يضمن أنه على الرغم من أن القيم الدقيقة قد تكون مفقودة، إلا أنه لا يتم تجاهل نقاط البيانات، وبالتالي توفير تحليل أكثر شمولاً.

لتعزيز مهاراتك في SQL، نوصي بالتدرب عبر الإنترنت على منصات مثل BigTechInterviews أو Leetcode أو مواقع مشابهة.

ماذا يفعل DENSE_RANK() في SQL؟

DENSE_RANK() هي دالة نافذة SQL تقوم بتعيين صفوف لصفوف البيانات بناءً على عمود محدد. يتعامل مع الروابط من خلال منحهم نفس المرتبة دون ترك أي فجوات في تسلسل الترتيب.

ما الفرق بين RANK() وROW_NUMBER() وDENSE_RANK() في SQL؟

RANK() وROW_NUMBER() يعينان رتبًا للبيانات، لكنهما يتعاملان مع الروابط بشكل مختلف. تترك الدالة RANK() فجوات في ترتيب البيانات المرتبطة، بينما تقوم ROW_NUMBER() بتعيين رقم فريد لكل صف دون مراعاة الروابط. من ناحية أخرى، تقوم DENSE_RANK() بتعيين رتب متطابقة لنقاط البيانات المرتبطة دون أي فجوات.

كيفية استخدام DENSE_RANK() في جملة WHERE في SQL؟

DENSE_RANK() هي دالة نافذة ولا يمكن استخدامها مباشرة في جملة WHERE. بدلاً من ذلك، يمكن استخدامها مع وظائف أخرى مثل ROW_NUMBER() أو RANK()، والتي يمكن بعد ذلك استخدامها في جملة WHERE لتصفية البيانات بناءً على الترتيب.

هل يمكن استخدام DENSE_RANK() بدون PARTITION BY؟

لا، يعد تحديد PARTITION BY أمرًا ضروريًا لتشغيل DENSE_RANK() بشكل سليم. وبدون ذلك، سيتم التعامل مع جميع البيانات كمجموعة واحدة، مما يؤدي إلى تصنيف غير دقيق ولا معنى له. يمكن أن يؤدي إتقان استخدام DENSE_RANK() في SQL إلى تحسين مهارات تحليل البيانات لديك بشكل كبير.

ما الفرق بين RANK() وDENSE_RANK()؟

يكمن الاختلاف الرئيسي بين RANK() وDENSE_RANK() في كيفية تعاملهما مع الروابط. بينما تترك الدالة RANK() فجوات في ترتيب البيانات المرتبطة، تقوم DENSE_RANK() بتعيين ترتيبات متطابقة لنقاط البيانات المرتبطة دون أي فجوات. بالإضافة إلى ذلك، تعمل RANK() دائمًا على زيادة رقم الترتيب بمقدار 1 لكل صف جديد، بينما تحافظ DENSE_RANK() على ترتيب مستمر.
 
 

جون هيوز كان محلل بيانات سابقًا في Uber ثم تحول إلى مؤسس منصة تعلم SQL التي تسمى BigTechInterviews (BTI). إنه متحمس لتعلم لغات برمجة جديدة ومساعدة المرشحين على اكتساب الثقة والمهارات اللازمة لاجتياز المقابلات الفنية. يدعو دنفر، كولورادو إلى منزله.

بقعة_صورة

أحدث المعلومات الاستخباراتية

بقعة_صورة