在MySQL中为每个组生成序列
如何为MySQL生成此序列?在MySQL中为每个组生成序列,mysql,sequence,Mysql,Sequence,如何为MySQL生成此序列? (注意:对于每个唯一的对,重新生成序列) 1,1--1 1,1--2 1,1--3 1,2--1 1,2-2 1,3--1 1,4--1 1,4-2 1,4--3您需要SQL Server for MySQL中的行数函数 SELECT @row_number := CASE WHEN @conc_no = conc THEN @row_number + 1 ELSE 1 END AS num, @conc_no :=
(注意:对于每个唯一的对,重新生成序列) 1,1--1
1,1--2
1,1--3
1,2--1
1,2-2
1,3--1
1,4--1
1,4-2
1,4--3
您需要SQL Server for MySQL中的
行数
函数
SELECT
@row_number := CASE
WHEN @conc_no = conc THEN
@row_number + 1
ELSE
1
END AS num,
@conc_no := mydata.conc AS conc
FROM
(
SELECT
CONCAT(num1, ",", num2) AS conc
FROM
table1
ORDER BY
num1 ASC, num2 ASC
) mydata
Fiddle:您需要SQL Server for MySQL中的
行号
函数
SELECT
@row_number := CASE
WHEN @conc_no = conc THEN
@row_number + 1
ELSE
1
END AS num,
@conc_no := mydata.conc AS conc
FROM
(
SELECT
CONCAT(num1, ",", num2) AS conc
FROM
table1
ORDER BY
num1 ASC, num2 ASC
) mydata
Fiddle:您需要SQL Server for MySQL中的
行号
函数
SELECT
@row_number := CASE
WHEN @conc_no = conc THEN
@row_number + 1
ELSE
1
END AS num,
@conc_no := mydata.conc AS conc
FROM
(
SELECT
CONCAT(num1, ",", num2) AS conc
FROM
table1
ORDER BY
num1 ASC, num2 ASC
) mydata
Fiddle:您需要SQL Server for MySQL中的
行号
函数
SELECT
@row_number := CASE
WHEN @conc_no = conc THEN
@row_number + 1
ELSE
1
END AS num,
@conc_no := mydata.conc AS conc
FROM
(
SELECT
CONCAT(num1, ",", num2) AS conc
FROM
table1
ORDER BY
num1 ASC, num2 ASC
) mydata
小提琴:创建一张桌子:-
create table dummy(id varchar(100));
在表中插入值:-
insert into dummy (id) values('1,1');
insert into dummy (id) values('1,1');
insert into dummy (id) values('1,1');
insert into dummy (id) values('1,2');
insert into dummy (id) values('1,2');
insert into dummy (id) values('1,3');
insert into dummy (id) values('1,4');
insert into dummy (id) values('1,4');
insert into dummy (id) values('1,4');
运行以下查询:-
select id,@aaaa:=ifnull(seq,@aaaa:=@aaaa+1)as seq from(select y.id,b,seq from (select
id,@aaa:=@aaa+1 as b from dummy cross join (select @aaa:=0)a) as y left join
(select id,a,@aa:=@aa as seq from (select * from (select id,@a:=@a+1 as a from dummy
cross join (select @a:=0)a)as b group by id)a cross join (select @aa:=1)as d )
as x on x.a=y.b) as z cross join (select @aaaa:=0)a;
创建一个表:-
create table dummy(id varchar(100));
在表中插入值:-
insert into dummy (id) values('1,1');
insert into dummy (id) values('1,1');
insert into dummy (id) values('1,1');
insert into dummy (id) values('1,2');
insert into dummy (id) values('1,2');
insert into dummy (id) values('1,3');
insert into dummy (id) values('1,4');
insert into dummy (id) values('1,4');
insert into dummy (id) values('1,4');
运行以下查询:-
select id,@aaaa:=ifnull(seq,@aaaa:=@aaaa+1)as seq from(select y.id,b,seq from (select
id,@aaa:=@aaa+1 as b from dummy cross join (select @aaa:=0)a) as y left join
(select id,a,@aa:=@aa as seq from (select * from (select id,@a:=@a+1 as a from dummy
cross join (select @a:=0)a)as b group by id)a cross join (select @aa:=1)as d )
as x on x.a=y.b) as z cross join (select @aaaa:=0)a;
创建一个表:-
create table dummy(id varchar(100));
在表中插入值:-
insert into dummy (id) values('1,1');
insert into dummy (id) values('1,1');
insert into dummy (id) values('1,1');
insert into dummy (id) values('1,2');
insert into dummy (id) values('1,2');
insert into dummy (id) values('1,3');
insert into dummy (id) values('1,4');
insert into dummy (id) values('1,4');
insert into dummy (id) values('1,4');
运行以下查询:-
select id,@aaaa:=ifnull(seq,@aaaa:=@aaaa+1)as seq from(select y.id,b,seq from (select
id,@aaa:=@aaa+1 as b from dummy cross join (select @aaa:=0)a) as y left join
(select id,a,@aa:=@aa as seq from (select * from (select id,@a:=@a+1 as a from dummy
cross join (select @a:=0)a)as b group by id)a cross join (select @aa:=1)as d )
as x on x.a=y.b) as z cross join (select @aaaa:=0)a;
创建一个表:-
create table dummy(id varchar(100));
在表中插入值:-
insert into dummy (id) values('1,1');
insert into dummy (id) values('1,1');
insert into dummy (id) values('1,1');
insert into dummy (id) values('1,2');
insert into dummy (id) values('1,2');
insert into dummy (id) values('1,3');
insert into dummy (id) values('1,4');
insert into dummy (id) values('1,4');
insert into dummy (id) values('1,4');
运行以下查询:-
select id,@aaaa:=ifnull(seq,@aaaa:=@aaaa+1)as seq from(select y.id,b,seq from (select
id,@aaa:=@aaa+1 as b from dummy cross join (select @aaa:=0)a) as y left join
(select id,a,@aa:=@aa as seq from (select * from (select id,@a:=@a+1 as a from dummy
cross join (select @a:=0)a)as b group by id)a cross join (select @aa:=1)as d )
as x on x.a=y.b) as z cross join (select @aaaa:=0)a;
我不清楚你需要什么?为了更好地生成序列来编写函数,而不是在技术上使用DBID,在开始之前还需要PK。表已经存在。两个表Category和SubCategory分别有两列Category_id和SubCategory_id。有第三个表规格。现在,每个项目(Cat+Subcat)都有多个规格。现在,假设对于具有类别\u id 1和子类别\u id 1的项目1,有3个规范。第2项有2个,第3项有1个,第4项有3个。在单个查询中,我需要生成此序列。我不清楚您需要什么?为了更好地生成序列来编写函数,而不是在技术上使用DBID,在开始之前还需要PK。表已经存在。两个表Category和SubCategory分别有两列Category_id和SubCategory_id。有第三个表规格。现在,每个项目(Cat+Subcat)都有多个规格。现在,假设对于具有类别\u id 1和子类别\u id 1的项目1,有3个规范。第2项有2个,第3项有1个,第4项有3个。在单个查询中,我需要生成此序列。我不清楚您需要什么?为了更好地生成序列来编写函数,而不是在技术上使用DBID,在开始之前还需要PK。表已经存在。两个表Category和SubCategory分别有两列Category_id和SubCategory_id。有第三个表规格。现在,每个项目(Cat+Subcat)都有多个规格。现在,假设对于具有类别\u id 1和子类别\u id 1的项目1,有3个规范。第2项有2个,第3项有1个,第4项有3个。在单个查询中,我需要生成此序列。我不清楚您需要什么?为了更好地生成序列来编写函数,而不是在技术上使用DBID,在开始之前还需要PK。表已经存在。两个表Category和SubCategory分别有两列Category_id和SubCategory_id。有第三个表规格。现在,每个项目(Cat+Subcat)都有多个规格。现在,假设对于具有类别\u id 1和子类别\u id 1的项目1,有3个规范。第2项有2个,第3项有1个,第4项有3个。在一个查询中,我需要生成这个序列。这很有效!!!非常感谢。但是如果有更多的专栏呢?说三还是四?这行得通吗?@TanmoyGhosh只需
CONCAT
所有你需要的栏目加上一些特殊的标点符号。确保结果字符串对于每个组都是唯一的,这没关系。@TanmoyGhosh不客气,伙计。如果你能接受我的答案,我将不胜感激。@TanmoyGhosh我的意思是通过点击我答案左边的复选标记来“接受”我的答案,伙计。这样我才能赢得声誉(๑´ㅂ`๑)♡*太好了!!!非常感谢。但是如果有更多的列呢?比如说三列或四列?这样行吗?@TanmoyGhosh只需CONCAT
所有需要的列,并加上一些特殊的标点。确保结果字符串对每个组都是唯一的,这没关系。@TanmoyGhosh不客气,伙计。如果你能接受,我将不胜感激我的答案:)@TanmoyGhosh我的意思是通过点击我答案左边的复选标记来“接受”我的答案,伙计。这样我才能赢得声誉(๑´ㅂ`๑)♡*太好了!!!非常感谢。但是如果有更多的列呢?比如说三列或四列?这样行吗?@TanmoyGhosh只需CONCAT
所有需要的列,并加上一些特殊的标点。确保结果字符串对每个组都是唯一的,这没关系。@TanmoyGhosh不客气,伙计。如果你能接受,我将不胜感激我的答案:)@TanmoyGhosh我的意思是通过点击我答案左边的复选标记来“接受”我的答案,伙计。这样我才能赢得声誉(๑´ㅂ`๑)♡*太好了!!!非常感谢。但是如果有更多的列呢?比如说三列或四列?这样行吗?@TanmoyGhosh只需CONCAT
所有需要的列,并加上一些特殊的标点。确保结果字符串对每个组都是唯一的,这没关系。@TanmoyGhosh不客气,伙计。如果你能接受,我将不胜感激我的答案:)@TanmoyGhosh我的意思是通过点击我答案左边的复选标记来“接受”我的答案,伙计。这样我才能赢得声誉(๑´ㅂ`๑)♡*