यदि आइटम सॉर्ट किए जाते हैं तो क्या मैं एक चयन स्टेटमेंट चला सकता हूं और पंक्ति संख्या प्राप्त कर सकता हूं?
मेरे पास इस तरह की एक तालिका है:
mysql> describe orders;
+-------------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+---------------------+------+-----+---------+----------------+
| orderID | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| itemID | bigint(20) unsigned | NO | | NULL | |
+-------------+---------------------+------+-----+---------+----------------+
मैं तब आईडी द्वारा आदेशों की संख्या प्राप्त करने के लिए इस क्वेरी को चला सकता हूं:
SELECT itemID, COUNT(*) as ordercount
FROM orders
GROUP BY itemID ORDER BY ordercount DESC;
यह मुझे itemIDइस तरह तालिका में प्रत्येक की एक गिनती देता है :
+--------+------------+
| itemID | ordercount |
+--------+------------+
| 388 | 3 |
| 234 | 2 |
| 3432 | 1 |
| 693 | 1 |
| 3459 | 1 |
+--------+------------+
मैं पंक्ति संख्या भी प्राप्त करना चाहता हूं, इसलिए मैं बता सकता हूं कि itemID=388पहली पंक्ति है, 234दूसरी है, आदि (अनिवार्य रूप से आदेशों की रैंकिंग, केवल एक कच्ची गिनती नहीं है)। मुझे पता है कि मैं जावा में ऐसा कर सकता हूं जब मुझे परिणाम सेट वापस मिल जाएगा, लेकिन मैं सोच रहा था कि क्या SQL में इसे पूरी तरह से संभालने का कोई तरीका था।
अपडेट करें
रैंक सेट करना इसे परिणाम सेट में जोड़ता है, लेकिन ठीक से आदेश नहीं दिया गया है:
mysql> SET @rank=0;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT @rank:=@rank+1 AS rank, itemID, COUNT(*) as ordercount
-> FROM orders
-> GROUP BY itemID ORDER BY rank DESC;
+------+--------+------------+
| rank | itemID | ordercount |
+------+--------+------------+
| 5 | 3459 | 1 |
| 4 | 234 | 2 |
| 3 | 693 | 1 |
| 2 | 3432 | 1 |
| 1 | 388 | 3 |
+------+--------+------------+
5 rows in set (0.00 sec)
ORDER BY rank ASC(ASCending क्रम में रैंक द्वारा आदेश) का उपयोग करें। मुझे लगता है कि आप क्या मतलब है, लेकिन ठीक से नहीं आदेश दिया