亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

MySQL-獲取選擇的行號

MySQL-獲取選擇的行號

慕沐林林 2019-06-15 10:27:14
MySQL-獲取選擇的行號如果對項進行排序,我可以運行SELECT語句并獲取行號嗎?我有一張這樣的桌子:mysql> describe orders;+-------------+---------------------+------+-----+---------+----------------+| Field       | Type                | Null | Key | Default | Extra          |+-------------+---------------------+------+-----+---------+----------------+| orderID     | bigint(20) unsigned | NO   | PRI | NULL    | auto_increment || itemID      | bigint(20) unsigned | NO   |     | NULL    |                |+-------------+---------------------+------+-----+---------+----------------+然后,我可以運行這個查詢,按ID獲取訂單數量:SELECT itemID, COUNT(*) as ordercountFROM ordersGROUP BY itemID ORDER BY ordercount DESC;這給了我一個數字itemID在這張桌子上:+--------+------------+| itemID | ordercount |+--------+------------+|    388 |          3 ||    234 |          2 ||   3432 |          1 ||    693 |          1 ||   3459 |          1 |+--------+------------+我也想要行號,所以我可以看出來itemID=388是第一排,234是第二位,等等(本質上是對訂單的排序,而不僅僅是原始的計數)。當我得到結果集時,我知道我可以用Java來完成這個任務,但是我想知道是否有一種方法可以完全在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)
查看完整描述

3 回答

?
FFIVE

TA貢獻1797條經驗 獲得超6個贊

看一看這,這個.

將查詢更改為:

SET @rank=0;SELECT @rank:=@rank+1 AS rank, itemID, COUNT(*) as ordercount  FROM orders  GROUP BY itemID  ORDER BY ordercount DESC;
SELECT @rank;

最后一個選擇是您的計數。


查看完整回答
反對 回復 2019-06-15
?
翻過高山走不出你

TA貢獻1875條經驗 獲得超3個贊

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


查看完整回答
反對 回復 2019-06-15
?
不負相思意

TA貢獻1777條經驗 獲得超10個贊

Swamibebop的解決方案起作用了,但是利用了table.*語法,我們可以避免重復內部的列名。select得到一個更簡單/更短的結果:

SELECT @r := @r+1 , 
       z.* FROM(/* your original select statement goes in here */)z, (SELECT @r:=0)y;

所以這會給你:

SELECT @r := @r+1 , 
       z.* FROM(
     SELECT itemID, 
     count(*) AS ordercount     FROM orders     GROUP BY itemID     ORDER BY ordercount DESC
    )z,
    (SELECT @r:=0)y;


查看完整回答
反對 回復 2019-06-15
  • 3 回答
  • 0 關注
  • 2251 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號