官术网_书友最值得收藏!

6.9 MySQL 8.0的新特性2——窗口函數

在MySQL 8.0版本之前,沒有排名函數,所以當需要在查詢當中實現排名時,必須手寫@變量,比較麻煩。

在MySQL 8.0版本中,新增了一個窗口函數,用它可以實現很多新的查詢方式。窗口函數類似于SUM()、COUNT()那樣的集合函數,但它并不會將多行查詢結果合并為一行,而是將結果放回多行當中。也就是說,窗口函數是不需要GROUP BY的。

下面通過案例來講述通過窗口函數實現排名效果的方法。

創建公司部門表branch,包含部門的名稱和部門人數兩個字段,創建語句如下:

查詢數據表branch中的數據:

對公司部門人數按從小到大進行排名,可以利用窗口函數來實現:

這里創建了名稱為w1的窗口函數,規定對brcount字段進行排序,然后在SELECT子句中對窗口函數w1執行rank()方法,將結果輸出為rank字段。

需要注意,這里的window w1是可選的。例如,在每一行中加入員工的總數,可以這樣操作:

可以一次性查詢出每個部門的員工人數占總人數的百分比,查詢結果如下:

主站蜘蛛池模板: 赞皇县| 仙游县| 潍坊市| 射阳县| 湛江市| 萨迦县| 从江县| 沙河市| 永吉县| 容城县| 镇雄县| 丽江市| 贵定县| 北京市| 蒙城县| 名山县| 荔浦县| 平舆县| 天长市| 蒙自县| 赫章县| 赞皇县| 涪陵区| 平潭县| 柳林县| 泸州市| 明光市| 修文县| 东乌珠穆沁旗| 恩平市| 伊春市| 泸西县| 外汇| 钟山县| 棋牌| 卫辉市| 舒城县| 沅陵县| 比如县| 泗阳县| 隆子县|