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

एक टेबल में कई रैंक

ये थोड़ा पेचीदा है. आप चर का उपयोग करना चाह सकते हैं, जैसे कि निम्न उदाहरण में:

SELECT    ( 
            CASE cust_type 
            WHEN @curType 
            THEN @curRow := @curRow + 1 
            ELSE @curRow := 1 AND @curType := cust_type END
          ) + 1 AS rank,
          cust_type,
          cust_name,
          revenue
FROM      sales,
          (SELECT @curRow := 0, @curType := '') r
ORDER BY  cust_type DESC, revenue DESC;

(SELECT @curRow := 0, @curType := '') r भाग एक अलग SET . की आवश्यकता के बिना चर आरंभीकरण की अनुमति देता है आदेश।

टेस्ट केस:

CREATE TABLE sales (cust_type varchar(10), cust_name varchar(10), revenue int);

INSERT INTO sales VALUES ('Top', 'A', 10000);
INSERT INTO sales VALUES ('Top', 'B', 9000);
INSERT INTO sales VALUES ('Top', 'C', 8000);
INSERT INTO sales VALUES ('Bottom', 'X', 5000);
INSERT INTO sales VALUES ('Bottom', 'Y', 6000);
INSERT INTO sales VALUES ('Bottom', 'Z', 7000);

परिणाम:

+------+-----------+-----------+---------+
| rank | cust_type | cust_name | revenue |
+------+-----------+-----------+---------+
|    1 | Top       | A         |   10000 |
|    2 | Top       | B         |    9000 |
|    3 | Top       | C         |    8000 |
|    1 | Bottom    | Z         |    7000 |
|    2 | Bottom    | Y         |    6000 |
|    3 | Bottom    | X         |    5000 |
+------+-----------+-----------+---------+
6 rows in set (0.00 sec)

एक और परीक्षण मामला:

CREATE TABLE sales (cust_type varchar(10), cust_name varchar(10), revenue int);

INSERT INTO sales VALUES ('Type X', 'A', 7000);
INSERT INTO sales VALUES ('Type X', 'B', 8000);
INSERT INTO sales VALUES ('Type Y', 'C', 5000);
INSERT INTO sales VALUES ('Type Y', 'D', 6000);
INSERT INTO sales VALUES ('Type Y', 'E', 4000);
INSERT INTO sales VALUES ('Type Z', 'F', 4000);
INSERT INTO sales VALUES ('Type Z', 'G', 3000);

परिणाम:

+------+-----------+-----------+---------+
| rank | cust_type | cust_name | revenue |
+------+-----------+-----------+---------+
|    1 | Type Z    | F         |    4000 |
|    2 | Type Z    | G         |    3000 |
|    1 | Type Y    | D         |    6000 |
|    2 | Type Y    | C         |    5000 |
|    3 | Type Y    | E         |    4000 |
|    1 | Type X    | B         |    8000 |
|    2 | Type X    | A         |    7000 |
+------+-----------+-----------+---------+
7 rows in set (0.00 sec)

आप स्पष्ट रूप से cust_type का आदेश दे सकते हैं अवरोही के बजाय आरोही क्रम में। मैं केवल Top have पाने के लिए अवरोही का उपयोग करता था Bottom . से पहले मूल परीक्षण मामले में।



  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 तुलना शून्य मान के साथ

  2. "ERROR 3942 (HY000) को ठीक करें:MySQL में VALUES स्टेटमेंट का उपयोग करते समय VALUES क्लॉज की प्रत्येक पंक्ति में कम से कम एक कॉलम होना चाहिए"

  3. MySQL में वर्तमान दिनांक और समय कैसे प्राप्त करें

  4. MySQL सर्वर का समय क्षेत्र कैसे बदलें

  5. Ubuntu 20.04 LTS पर MySQL 8 कैसे स्थापित करें?