Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

MSSQL शीर्ष 10 जीतने वाले स्कोर का चयन करें, जिसमें टाई और प्रत्येक श्रेणी से कम से कम एक शामिल है

जैसा कि मैं इसे देख सकता हूं, आपको अपनी पंक्तियों को अधिक परिष्कृत तरीके से रैंक करने की आवश्यकता है, ताकि प्रत्येक श्रेणी में शीर्ष प्रविष्टियां उनके मूल्यों की परवाह किए बिना शामिल की जा सकें, और जो प्रविष्टियां शीर्ष पर नहीं हैं उन्हें उनके समग्र के अनुसार शामिल किया गया है। रैंकिंग।

मैं जो सुझाव देने जा रहा हूं वह सबसे कुशल समाधान नहीं हो सकता है, लेकिन यह काम करना चाहिए और अगर कुछ और नहीं कर सकता है, तो किसी और को कुछ बेहतर करने के लिए प्रेरित कर सकता है:

WITH ranked1 AS (
  SELECT
    *,
    RankByCategory = DENSE_RANK() OVER (
      PARTITION BY CategoryID
      ORDER BY Score DESC
    )
  FROM YourTable
),
ranked2 AS (
  SELECT
    *,
    FinalRank = DENSE_RANK() OVER (
      ORDER BY
        CASE RankByCategory WHEN 1 THEN 1 ELSE 2 END,
        Score DESC
    )
  FROM ranked1
)
SELECT
  EntryID,
  CategoryID,
  Score
FROM ranked2
WHERE FinalRank <= @top_n
;

पहला सीटीई श्रेणियों के आधार पर पंक्तियों की रैंकिंग कर रहा है, इस प्रकार हमें यह पता लगाने देता है कि कौन सी प्रविष्टियाँ अपनी-अपनी श्रेणियों में शीर्ष पर हैं। अगला चरण (दूसरा सीटीई) वैश्विक रैंकिंग प्राप्त करने के बारे में है, इस बार यह ध्यान में रखते हुए कि कोई प्रविष्टि अपनी श्रेणी में शीर्ष पर है या नहीं। श्रेणी के शीर्ष मान निम्न रैंकिंग प्राप्त करते हैं और इस प्रकार अंतिम परिणामों में शामिल होना सुनिश्चित किया जाता है। (बेशक, आपको यह सुनिश्चित करने की आवश्यकता है कि श्रेणियों की संख्या उन विशिष्ट मानों की संख्या से अधिक नहीं है जिन्हें आप आउटपुट में प्राप्त करना चाहते हैं।)

यह रहा एसक्यूएल फिडल पर लाइव उदाहरण साथ खेलने के लिए।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर 2019 (ज्ञात बग) में मूल रूप से संकलित संग्रहीत प्रक्रिया को निष्पादित करते समय "आंतरिक कनेक्शन घातक त्रुटि"

  2. एसक्यूएल सर्वर 2008 में ईमेल सत्यापन?

  3. SQL सर्वर में ORIGINAL_DB_NAME () कैसे काम करता है

  4. एसक्यूएल सर्वर 2008 डेटाबेस के साथ vb.net या सी # डेस्कटॉप एप्लिकेशन में पावर द्वि रिपोर्ट और डैशबोर्ड एम्बेड करने का कोई तरीका है?

  5. SQL सर्वर RAISERROR क्या है?