成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MySQL數(shù)據(jù)庫如何生成分組排序的序號(hào)

數(shù)據(jù)庫 MySQL
在MySQL8.0中可以使用窗口函數(shù)來實(shí)現(xiàn),可以參考?xì)v史文章有了這些函數(shù),統(tǒng)計(jì)分析事半功倍進(jìn)行了解。而MySQL5.7中由于沒有這類函數(shù),該如何實(shí)現(xiàn)呢,下面對(duì)比MySQL8.0,列舉兩種情況的實(shí)現(xiàn)。

經(jīng)常進(jìn)行數(shù)據(jù)分析的小伙伴經(jīng)常會(huì)需要生成序號(hào)或進(jìn)行數(shù)據(jù)分組排序并生成序號(hào)。在MySQL8.0中可以使用窗口函數(shù)來實(shí)現(xiàn),可以參考?xì)v史文章有了這些函數(shù),統(tǒng)計(jì)分析事半功倍進(jìn)行了解。而MySQL5.7中由于沒有這類函數(shù),該如何實(shí)現(xiàn)呢,下面對(duì)比MySQL8.0,列舉兩種情況的實(shí)現(xiàn)。

1、數(shù)據(jù)準(zhǔn)備

創(chuàng)建一張演示表:

#創(chuàng)建表
CREATE TABLE users (
  id INT PRIMARY KEY,
  group_id INT,
  c_name VARCHAR(64)
);

插入演示數(shù)據(jù):

-- 插入10行數(shù)據(jù)
INSERT INTO users VALUES (1, 1, '張三');
INSERT INTO users VALUES (2, 1, '李四');
INSERT INTO users VALUES (3, 2, '王五');
INSERT INTO users VALUES (4, 2, '趙六');
INSERT INTO users VALUES (5, 3, '錢七');
INSERT INTO users VALUES (6, 1, '周八');
INSERT INTO users VALUES (7, 2, '吳九');
INSERT INTO users VALUES (8, 3, '鄭十');
INSERT INTO users VALUES (9, 1, '孫十一');
INSERT INTO users VALUES (10, 3, '李十二');

2、生成序號(hào) 

(1)使用窗口函數(shù)ROW_NUMBER()實(shí)現(xiàn)

在MySQL8.0中可以直接使用窗口函數(shù)ROW_NUMBER()來實(shí)現(xiàn)序號(hào)的生成,例如:

# 根據(jù)c_name字段進(jìn)行排序生成序號(hào)
SELECT
  ROW_NUMBER() OVER (ORDER BY c_name) AS row_num,
  id,
  c_name
FROM
users;

結(jié)果如下:

+---------+----+-----------+
| row_num | id | c_name    |
+---------+----+-----------+
|       1 |  7 | 吳九      |
|       2 |  6 | 周八      |
|       3 |  9 | 孫十一    |
|       4 |  1 | 張三      |
|       5 | 10 | 李十二    |
|       6 |  2 | 李四      |
|       7 |  3 | 王五      |
|       8 |  4 | 趙六      |
|       9 |  8 | 鄭十      |
|      10 |  5 | 錢七      |
+---------+----+-----------+
10 rows in set, 1 warning (0.00 sec)

圖片

(2)低版本MySQL中的實(shí)現(xiàn)

因?yàn)樵贛ySQL8.0版本之前無ROW_NUMBER()窗口函數(shù),因此需要結(jié)束變量來實(shí)現(xiàn)。具體示例如下:

SET @row_num = 0;


SELECT
  (@row_num:=@row_num + 1) AS row_num,
  id,
 c_name
FROM
  users
ORDER BY
  c_name;

結(jié)果如下:

+---------+----+-----------+
| row_num | id | c_name    |
+---------+----+-----------+
|       1 |  7 | 吳九      |
|       2 |  6 | 周八      |
|       3 |  9 | 孫十一    |
|       4 |  1 | 張三      |
|       5 | 10 | 李十二    |
|       6 |  2 | 李四      |
|       7 |  3 | 王五      |
|       8 |  4 | 趙六      |
|       9 |  8 | 鄭十      |
|      10 |  5 | 錢七      |
+---------+----+-----------+
10 rows in set, 1 warning (0.00 sec)

圖片

注意:每次執(zhí)行前需要將@row_num重新設(shè)置為0 ,即執(zhí)行SET @row_num = 0。

3、分組后排序

(1)繼續(xù)使用窗口函數(shù)ROW_NUMBER()實(shí)現(xiàn)

在MySQL8.0中可以繼續(xù)使用窗口函數(shù)ROW_NUMBER()來實(shí)現(xiàn)分組排序的功能,例如:

SELECT
  id,
  group_id,
  c_name,
  ROW_NUMBER() OVER (PARTITION BY group_id ORDER BY id) AS row_num
FROM
  users
ORDER BY
  group_id, id;

運(yùn)行結(jié)果如下:

+----+----------+-----------+---------+
| id | group_id | c_name    | row_num |
+----+----------+-----------+---------+
|  1 |        1 | 張三      |       1 |
|  2 |        1 | 李四      |       2 |
|  6 |        1 | 周八      |       3 |
|  9 |        1 | 孫十一    |       4 |
|  3 |        2 | 王五      |       1 |
|  4 |        2 | 趙六      |       2 |
|  7 |        2 | 吳九      |       3 |
|  5 |        3 | 錢七      |       1 |
|  8 |        3 | 鄭十      |       2 |
| 10 |        3 | 李十二    |       3 |
+----+----------+-----------+---------+
10 rows in set (0.00 sec)

圖片

(2)低版本MySQL中的實(shí)現(xiàn)

因?yàn)樯婕暗椒纸M及分組后排序,因此需要引入2個(gè)變量,一個(gè)用于分組標(biāo)識(shí),一個(gè)用于組內(nèi)排序標(biāo)識(shí),示例如下:

SET @row_num = 0;
SET @g_id = NULL;


SELECT
  id,
  group_id,
  c_name,
  @row_num := CASE
                  WHEN @g_id = group_id THEN @row_num + 1
                  ELSE 1
                END AS row_num,
  @g_id := group_id AS v_gid
FROM
  users
ORDER BY
  group_id, id;

運(yùn)行結(jié)果如下:

+----+----------+-----------+---------+-------+
| id | group_id | c_name    | row_num | v_gid |
+----+----------+-----------+---------+-------+
|  1 |        1 | 張三      |       1 |     1 |
|  2 |        1 | 李四      |       2 |     1 |
|  6 |        1 | 周八      |       3 |     1 |
|  9 |        1 | 孫十一    |       4 |     1 |
|  3 |        2 | 王五      |       1 |     2 |
|  4 |        2 | 趙六      |       2 |     2 |
|  7 |        2 | 吳九      |       3 |     2 |
|  5 |        3 | 錢七      |       1 |     3 |
|  8 |        3 | 鄭十      |       2 |     3 |
| 10 |        3 | 李十二    |       3 |     3 |
+----+----------+-----------+---------+-------+
10 rows in set, 2 warnings (0.00 sec)

圖片

這樣就實(shí)現(xiàn)了分組及排序的序號(hào)生成。

責(zé)任編輯:姜華 來源: 數(shù)據(jù)庫干貨鋪
相關(guān)推薦

2010-06-18 12:45:20

SQL Server數(shù)

2020-05-14 14:57:48

MySQLExcel排序

2021-01-26 13:40:44

mysql數(shù)據(jù)庫

2023-02-28 17:24:32

順串字符串快速排序

2009-02-02 13:16:23

修復(fù)數(shù)據(jù)表MySQL

2011-05-18 13:16:21

MySQL數(shù)據(jù)庫鎖定

2011-03-21 17:00:23

MySQL數(shù)據(jù)庫

2010-06-01 12:51:23

MySQL數(shù)據(jù)庫

2011-03-08 08:49:55

MySQL優(yōu)化單機(jī)

2011-08-29 14:00:26

MySQL主從延時(shí)

2018-09-11 17:13:23

MySQ數(shù)據(jù)庫重復(fù)記錄

2011-05-13 09:42:21

2010-07-01 11:14:36

SQL Server

2011-05-11 10:54:47

分組想加

2011-03-22 14:57:52

Oracle數(shù)據(jù)庫普通表分區(qū)表

2011-02-22 14:26:04

ProFTPD

2011-02-22 14:26:04

ProFTPD

2009-05-08 09:56:37

MaxDBMySQL數(shù)據(jù)庫管理

2010-07-09 09:24:37

SQL Server分

2021-08-02 10:53:28

PythonMySQL數(shù)據(jù)庫
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 福利视频日韩 | 中文字幕中文字幕 | 日韩三级在线 | 欧美三级免费观看 | 精品网站999 | 亚洲欧美激情精品一区二区 | 色综合一区二区三区 | 精品一二三 | 中文字幕1区2区3区 亚洲国产成人精品女人久久久 | 天堂资源 | 午夜精品久久久久久久久久久久 | 久久一视频 | 亚洲综合在线一区 | 日日干干夜夜 | 在线视频一区二区 | 国产在线观看一区二区三区 | 国产韩国精品一区二区三区 | 美女网站视频免费黄 | 欧美色图另类 | 欧美一区二区小视频 | 婷婷久久五月 | 国产精品一区二区三区四区 | 亚洲综合首页 | 中文字幕在线视频网站 | 国产精品毛片av一区 | 免费久久久久久 | 精品视频999 | 国产区在线视频 | 91麻豆精品国产91久久久久久 | 在线观看亚洲专区 | 黄色免费在线观看网址 | 日韩在线第一 | 久久久久成人精品亚洲国产 | 成年免费在线观看 | 亚洲小视频在线观看 | 国产精品a久久久久 | 2一3sex性hd| 欧美一区二区三区,视频 | 中文字幕亚洲一区 | 亚洲激精日韩激精欧美精品 | 国产成人高清成人av片在线看 |