Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MySQL

MySQL में सबक्वेरी और ORDER BY RAND से अंतिम 50 प्रविष्टियों में से 5 रैंडम पंक्तियाँ चुनें

बड़ी टेबल से हाल की N पंक्तियों में से रैंडम नमूना लेने के लिए: पहले सबक्वेरी में ORDER BY id DESC LIMIT N से हाल की पंक्तियाँ लें, फिर बाहरी क्वेरी में ORDER BY RAND() LIMIT M लागू करें।

टेबल बनाएं (केवल ID)

mysql> CREATE TABLE DemoTable1853 (
    UserId INT NOT NULL AUTO_INCREMENT PRIMARY KEY
);

58 पंक्तियाँ डालें

mysql> INSERT INTO DemoTable1853 VALUES(),(),(),()...; -- 58 पंक्तियाँ

अंतिम 50 में से 5 रैंडम चुनें

mysql> SELECT tbl.*
    FROM (
        SELECT tbl1.*
        FROM DemoTable1853 tbl1
        ORDER BY UserId DESC
        LIMIT 50
    ) tbl
    ORDER BY RAND()
    LIMIT 5;

आउटपुट (उदाहरण):

+--------+
| UserId |
+--------+
|     19 |
|     24 |
|     43 |
|     36 |
|     48 |
+--------+

चरण-दर-चरण

  1. आंतरिक क्वेरी: ORDER BY UserId DESC LIMIT 50 → नवीनतम 50 आईडी (9 से 58)।
  2. बाहरी क्वेरी: उन 50 को ORDER BY RAND() से फेरबदल करें।
  3. LIMIT 5 → पहले 5 चुनें।

प्रदर्शन चेतावनी

  • ORDER BY RAND() बड़ी परिणाम सेट पर धीमा है (अस्थायी टेबल + फाइलसॉर्ट)।
  • यहां केवल 50 पंक्तियों पर लागू होता है, इसलिए ठीक है।
  • बड़े नमूने के लिए: WHERE RAND() < (sample_size / table_size) या TABLESAMPLE (MySQL 8.0.31+) उपयोग करें।

विकल्प: ऑफसेट-आधारित रैंडम

SELECT * FROM DemoTable1853
WHERE UserId >= (SELECT FLOOR(RAND() * (SELECT MAX(UserId) FROM DemoTable1853)))
ORDER BY UserId LIMIT 5;

यह इंडेक्स उपयोग करता है लेकिन वितरण समान नहीं हो सकता।

  1. MySQL से अंतिम 10 रो कैसे चुनें? MySQL से अंतिम 10 रो कैसे चुनें?

    MySQL से अंतिम 10 रो चुनने के लिए, हम SELECT स्टेटमेंट और LIMIT कॉन्सेप्ट के साथ सबक्वेरी का उपयोग कर सकते हैं। निम्न एक उदाहरण है। टेबल बनाना। mysql> create table Last10RecordsDemo -> ( -> id int, -> name varchar(100) -> ); Query OK, 0 rows affected (0.75 sec) टेबल में रिकॉर

  1. - MySQL में सबक्वेरी और ORDER BY DESC LIMIT से अंतिम 3 पंक्तियां आरोही क्रम में प्राप्त करें

    टेबल की अंतिम N पंक्तियों को आरोही क्रम में प्राप्त करने के लिए: पहले अवरोही क्रम में N पंक्तियां लें, फिर बाहरी क्वेरी में आरोही क्रम में सॉर्ट करें। सिंटैक्स SELECT * FROM ( SELECT * FROM टेबल_नाम ORDER BY कॉलम_नाम DESC LIMIT 3 ) AS alias ORDER BY कॉलम_नाम ASC; उदाहरण 1. टेबल बनाएं

  1. - MySQL में NOT IN का उपयोग करके केवल विशिष्ट पंक्तियाँ हटाएं

    MySQL में DELETE स्टेटमेंट के साथ NOT IN ऑपरेटर का उपयोग करके आप उन पंक्तियों को हटा सकते हैं जो दी गई सूची में नहीं हैं। यह विशिष्ट रिकॉर्ड रखते हुए बाकी हटाने के लिए उपयोगी है। टेबल बनाएं और डेटा डालें mysql> CREATE TABLE DemoTable1830 ( StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,