對數據庫中的某張表的進行分組排序並對結果集的輸出進行編號:
Oracle和SQL Server實現:通過row_number() over,
SQLserver實例:
SELECT
ROW_NUMBER() OVER(PARTITION BY recovery_model_desc ORDER BY name ASC)
AS Row#,
name, recovery_model_desc
FROM sys.databases WHERE database_id < 5;
下面是結果集:
MySQL中實現:這裏列出語法,自己測吧:
SELECT
IF(@temp=列名1, @rank:=@rank+1,@rank:=1) rn,
@temp:=列名1,
列名2,
......,
列名n
FROM 表
ORDER BY 列名1,列名2, 升序或降序;
分析:(注意紅色部分)
IF(@temp=列名1, @rank:=@rank+1,@rank:=1) rn:每一行判斷,當前行的列名1的值是否等於上一個@temp變量值,如果是在上一個@rank變量值基礎上+1,否則@rank賦值1
@temp:=列名1,當前行列賦值給變量@temp
ORDER BY 列名1,列名2:列名1實現分組,列名2實現排序
IF結束後記得加上@temp:=列名1,也就是要分組的列,你可以不加試試查看結果集