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

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

MySQL中的ROW_NUMBER()

MySQL中的ROW_NUMBER()

HUX布斯 2019-05-25 14:47:07
MySQL中的ROW_NUMBER()MySQL是否有一種很好的方式來復制SQL Server功能ROW_NUMBER()?例如:SELECT      col1, col2,      ROW_NUMBER() OVER (PARTITION BY col1, col2 ORDER BY col3 DESC) AS intRowFROM Table1然后,我可以,例如,添加一個限制intRow為1 的條件,以獲得col3每(col1, col2)對最高的單行。
查看完整描述

4 回答

?
www說

TA貢獻1775條經驗 獲得超8個贊

我總是最終遵循這種模式。鑒于此表:


+------+------+

|    i |    j |

+------+------+

|    1 |   11 |

|    1 |   12 |

|    1 |   13 |

|    2 |   21 |

|    2 |   22 |

|    2 |   23 |

|    3 |   31 |

|    3 |   32 |

|    3 |   33 |

|    4 |   14 |

+------+------+

你可以得到這個結果:


+------+------+------------+

|    i |    j | row_number |

+------+------+------------+

|    1 |   11 |          1 |

|    1 |   12 |          2 |

|    1 |   13 |          3 |

|    2 |   21 |          1 |

|    2 |   22 |          2 |

|    2 |   23 |          3 |

|    3 |   31 |          1 |

|    3 |   32 |          2 |

|    3 |   33 |          3 |

|    4 |   14 |          1 |

+------+------+------------+

通過運行此查詢,不需要定義任何變量:


SELECT a.i, a.j, count(*) as row_number FROM test a

JOIN test b ON a.i = b.i AND a.j >= b.j

GROUP BY a.i, a.j


查看完整回答
1 反對 回復 2019-05-25
?
夢里花落0921

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

我希望每個(col1,col2)對的行具有單個最高col3。

這是一個分組最大值,是最常見的SQL問題之一(因為它看起來應該很簡單,但實際上并非如此)。

我常常喜歡null-self-join:

SELECT t0.col3FROM table AS t0LEFT JOIN table AS t1 ON t0.col1=t1.col1 AND t0.col2=t1.col2 AND t1.col3>t0.col3WHERE t1.col1 IS NULL;

“獲取表格中沒有其他行匹配col1的行,col2具有更高的col3。”(您會注意到這一點,如果多行具有相同的col1,則大多數其他groupwise-maximum解決方案將返回多行,col2 ,col3。如果這是一個問題,你可能需要一些后期處理。)


查看完整回答
反對 回復 2019-05-25
?
郎朗坤

TA貢獻1921條經驗 獲得超9個贊

MySQL中沒有排名功能。你可以得到的最接近的是使用一個變量:

SELECT t.*, 
       @rownum := @rownum + 1 AS rank  FROM YOUR_TABLE t, 
       (SELECT @rownum := 0) r

那么在我的案例中如何運作呢?我需要兩個變量,col1和col2各有一個?當col1改變時,Col2需要以某種方式重置..?

是。如果是Oracle,則可以使用LEAD函數在下一個值處達到峰值。值得慶幸的是,Quassnoi涵蓋了您需要在MySQL中實現的邏輯。


查看完整回答
反對 回復 2019-05-25
?
一只斗牛犬

TA貢獻1784條經驗 獲得超2個贊

SELECT 

    @i:=@i+1 AS iterator, 

    t.*

FROM 

    tablename AS t,

    (SELECT @i:=0) AS foo


查看完整回答
反對 回復 2019-05-25
  • 4 回答
  • 0 關注
  • 13156 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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