SORU
26 Mart 2010, Cuma


MySQL satır seçmek numarası

Eğer öğeleri sıralanmış, bir select deyimi çalıştırın ve satır numarasını alabilir miyim?

Böyle bir tablo var:

mysql> describe orders;
 ------------- --------------------- ------ ----- --------- ---------------- 
| Field       | Type                | Null | Key | Default | Extra          |
 ------------- --------------------- ------ ----- --------- ---------------- 
| orderID     | bigint(20) unsigned | NO   | PRI | NULL    | auto_increment |
| itemID      | bigint(20) unsigned | NO   |     | NULL    |                |
 ------------- --------------------- ------ ----- --------- ---------------- 

O zaman bu sorgu KİMLİĞİ tarafından sipariş numarasını almak için çalıştırabilirsiniz:

SELECT itemID, COUNT(*) as ordercount
FROM orders
GROUP BY itemID ORDER BY ordercount DESC;

Bu bana tablo şöyle: itemID her bir sayı verir

 -------- ------------ 
| itemID | ordercount |
 -------- ------------ 
|    388 |          3 |
|    234 |          2 |
|   3432 |          1 |
|    693 |          1 |
|   3459 |          1 |
 -------- ------------ 

Almak istiyorum satır sayısı, bu yüzden söyleyebilirim ki itemID=388 ilk satır 234 ikinci, vb (aslında rütbeli bir emir değil, sadece bir ham sayısı). Sonuç geri geldiğimde Java ile bunu yapabileceğimi biliyorum, ama eğer SQL tamamen çözmenin bir yolu varsa merak ettim.

Güncelleme

Rütbe sonuç kümesi ekler, ama düzgün sıralı değil ayarı:

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)

CEVAP
17 Aralık 2010, Cuma


SELECT @rn:=@rn 1 AS rank, itemID, ordercount
FROM (
  SELECT itemID, COUNT(*) AS ordercount
  FROM orders
  GROUP BY itemID
  ORDER BY ordercount DESC
) t1, (SELECT @rn:=0) t2;

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 0TACTICAL0HIPPY0

    0TACTICAL0HI

    30 EYLÜL 2012
  • fast2hell

    fast2hell

    16 AĞUSTOS 2006
  • Photoshop Tutorials

    Photoshop Tu

    22 HAZİRAN 2011