mysql 行號 mysql的行號問題

2021-10-25 14:18:42 字數 3079 閱讀 4143

1、行號問題行號是指按順序為查詢結果集的行分配的連續整數。mysql資料庫在行號方面的支援並不是十分友好,沒有橡其他資料庫一樣提供類似的row_number解決方案,因此得到行號是乙個十分有技巧的問題。

2.1 不重複資料分析問題先看以下例項資料,建立sales表:

create table sales

empid varchar(10) not null,

mgrid varchar(10) not null,

qty int not null,

primary key (empid)

插入例項資料:

insert into sales values('a','z',300);

insert into sales values('b','x',100);

insert into sales values('c','x',200);

insert into sales values('d','y',200);

insert into sales values('e','z',250);

insert into sales values('f','z',300);

insert into sales values('g','x',100);

insert into sales values('h','y',150);

insert into sales values('i','x',250);

insert into sales values('j','z',100);

insert into sales values('k','y',200);

檢視sales資料:

分析問題是我們如何使用sql語句將empid輸出乙個行號出來?從1開始?sales表empid是主鍵不會存在重複的資料,如果不是主鍵存在重複的資料怎麼寫sql:

我是這麼分析的過程:

a = a 結果為 true 計數器加1

a < b 結果為 true 計數器加1 結果為2

b < c 結果為 true 計數器加1 結果為3

c < d 結果為 trne 計數器加1 結果為4

依次類推;empid欄位自已跟自已關聯,如果條件滿足小於或等於時,計資料加1,寫成以下sql,

在sql語句中,稱為子查詢。

上面的語句功能還有乙個效能上的問題,經過測試改為以下:

select empid,

(select count(*)

from sales as t2

where t2.qty < t1.qty or (t2.qty = t1.qty and t2.empid <= t1.empid)

) as rownum

from

sales as t1

order by qty,empid;

2.2 重複資料分析問題

先看以下例項資料,建立數字輔助表nums

建立重複資料表t;

看一下t表的資料,x有3條記錄,y有2條記錄,z有1條記錄,這個場景下如何解決行號問題?經過分析以後:

3、總結問題:

行號的資料問題,其實在mysql開發實踐中經常會遇到,我們做倆步分析問題,不重數的資料我們採用子查詢自連求數,如果是重複的資料,我們採用資料輔助表和子查詢自連求之。

mysql生成行號 MySQL生成行號

引言 在mysql資料庫使用過程中,發現沒有像db2那樣方便能自動生成行號,於是通過網路查閱資料,現整理如下,方便以後自己查閱.建立資料庫 create database 建立資料庫 if not exists sql test 如果不存在就建立,存在就不建立 default charset utf...

mysql查詢行號

mysql查詢結果集中顯示行號的方法。建立user表 create table user name varchar 12 default null engine innodb default charset utf8 插入若干條資料 insert into test user name values...

MySQL查詢顯示行號

oracle中有專門的rownum 顯示行號的函式,而mysql沒有專門的顯示行號函式,但可以通過用 rownum自定義變數顯示行號。主要 rownum rownum 1 rownum select rownum 0 as rn例 如果按照某個字段排序,行號會不規則排列,換成先排序,外層加上行號 s...