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

उच्चतम अंकों वाले पहले तीन समूहों के विशिष्ट अंक होने चाहिए

वह चुनौतीपूर्ण था।

इसे हल करने के लिए मैंने कई तरीकों का इस्तेमाल किया:

  1. एक केस स्टेटमेंट शीर्ष 3 में समूह के स्थान को अंकों में बदलने के लिए।
  2. पंक्तियों का क्रमांकन चर . के साथ ।
  3. आंतरिक और बाएं जॉइन करें परिणामों को एक साथ मिलाने के लिए।

निम्नलिखित क्वेरी का परीक्षण आपकी पहेली और कार्यों पर किया गया था:

SELECT t1.`id`,  t1.`name`,  t1.`group1`,
       t1.`section`, t1.`MARKS`, `t_group_points`.`points`

FROM   `students` t1

#--- Join  groups' points to the students
LEFT JOIN (
    (
        #---- Join all groups and give points to top 3 avg's groups ----
        SELECT `t4`.`group1`, `t_points`.`points`
        FROM   (SELECT   `t3`.`group1`, AVG(`t3`.`marks`) AS `avg`
                FROM     `students` `t3`
                WHERE    (`t3`.`section` = 'class1') AND
                         (`t3`.`group1` IS NOT NULL)
                GROUP BY `t3`.`group1`) `t4`

        INNER JOIN (
              #---------- Select top 3 avarages ----------
              (SELECT `top`.`avg`,
                      #-- Convert row number to points ---
                      CASE @curRow := @curRow + 1  
                           WHEN '1' THEN 5
                           WHEN '2' THEN 3
                           WHEN '3' THEN 1
                           ELSE NULL END 'points'

              FROM (SELECT DISTINCT `t_avg`.`avg`
                    FROM   (SELECT   `t2`.`group1`, AVG(`t2`.`marks`) AS `avg`
                            FROM     `students` `t2`
                            WHERE    (`t2`.`section` = 'class1') AND
                                     (`t2`.`group1` IS NOT NULL)
                            GROUP BY `group1`) `t_avg`
                    ORDER BY `avg` DESC
                    LIMIT 0, 3) `top`, (SELECT @curRow:=0) r
              ) AS `t_points`)
         ON (`t_points`.`avg` = `t4`.`avg`)      
    ) AS `t_group_points`)
ON (`t_group_points`.`group1` = `t1`.`group1`)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. उच्च संख्यात्मक परिशुद्धता MySQL और SQLAlchemy ORM के साथ तैरती है

  2. सहसंबद्ध के साथ COUNT(DISTINCT) द्वारा प्रतिशतक जहां केवल एक दृश्य के साथ काम करता है (या DISTINCT के बिना)

  3. MySql Connector C++ के कारण अनसुलझे बाहरी प्रतीक को कैसे ठीक करें?

  4. MySQL विदेशी कुंजी जोड़ें

  5. MySQL INNER जॉइन दूसरी तालिका से केवल एक पंक्ति का चयन करें