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

MYSQL - ग्रुप बाय लिमिट

मुझे नहीं लगता कि MySQL में एक आसान तरीका है। ऐसा करने का एक तरीका है कि रेटिंग_नाम द्वारा समूहों में विभाजित प्रत्येक पंक्ति के लिए एक पंक्ति संख्या उत्पन्न करना, और उसके बाद केवल पंक्ति_संख्या 2 या उससे कम वाली पंक्तियों का चयन करें। अधिकांश डेटाबेस में आप कुछ इस तरह का उपयोग करके ऐसा कर सकते हैं:

SELECT * FROM (
    SELECT
        rating_name,
        etc...,
        ROW_NUMBER() OVER (PARTITION BY rating_name ORDER BY good) AS rn
    FROM your_table
) T1
WHERE rn <= 2

दुर्भाग्य से, MySQL ROW_NUMBER . का समर्थन नहीं करता है वाक्य - विन्यास। हालांकि आप ROW_NUMBER का अनुकरण कर सकते हैं चर का उपयोग करना:

SELECT
    rating_name, id_markets, good, neutral, bad
FROM (
    SELECT
        *,
        @rn := CASE WHEN @prev_rating_name = rating_name THEN @rn + 1 ELSE 1 END AS rn,
        @prev_rating_name := rating_name
    FROM (
        SELECT
            rating_name,
            id_markets,
            SUM(COALESCE(rating_good, 0)) AS good,
            SUM(COALESCE(rating_neutral, 0)) AS neutral,
            SUM(COALESCE(rating_bad, 0)) AS bad
        FROM zzratings
        WHERE rating_year = YEAR(CURDATE()) AND rating_week = WEEK(CURDATE(), 1)
        GROUP BY rating_name, id_markets
    ) AS T1, (SELECT @prev_rating_name := '', @rn := 0) AS vars
    ORDER BY rating_name, good DESC
) AS T2
WHERE rn <= 2
ORDER BY rating_name, good DESC

आपके परीक्षण डेटा पर चलने पर परिणाम:

france    1  2  0  0
france    2  1  0  0
ireland   1  4  2  0
ireland  21  3  1  0
poland    1  3  1  0
poland    2  1  0  0


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. JAR फ़ाइलों के लिए क्लासपाथ सेट करना

  2. mysql क्वेरी PHP:मैं चाहता हूं कि एक विशिष्ट आइटम पहले हो और फिर बाकी वस्तुओं को सॉर्ट करें

  3. MySQL INT अर्थ

  4. MySQL को छोड़कर वैकल्पिक

  5. MySQL में ENUM (गणना) डेटा प्रकार:शीर्ष 12 तथ्य और उपयोगी टिप्स