环境:
create table ff(f1 varcahr(10), f2 int);
insert into ff values ('A', round(rand()*100));
insert into ff values ('A', round(rand()*100));
insert into ff values ('A', round(rand()*100));
需要执行一条SQL语句得到一行记录 'A' , '98,44,55'
语句:
set @row:=0;
select tmp.f1, concat(max(tmp.a),',',max(tmp.b),',',max(tmp.c)) as 'all'
from (
select
@row:=@row+1,
f1,
case when @row=1 then f2 else 0 end as a,
case when @row=2 then f2 else 0 end as b,
case when @row=3 then f2 else 0 end as c
from ff group by @row
)
as tmp group by tmp.f1;
思路:
这个是典型的行转列,然后再concat连成字符串
step1: 在表上添加rowId
select @row:=@row+1, f1,f2 from ff;
step2: 对rowId进行分组
select @row:=@row+1, f1,f2 from ff group by @row
step3: 添加以后用来合成的目标列
select @row:=@row+1, f1,0 as a, 0 as b, 0 as c from ff group by @row
step4: 对于rowid=1的分组, a列取f2值, b,c都是0; 对于rowId=2的分组, a,c列取0, b取f2的值... 这里的case when就是行转列的法宝
select
@row:=@row+1,
f1,
case when @row=1 then f2 else 0 end as a,
case when @row=2 then f2 else 0 end as b,
case when @row=3 then f2 else 0 end as c
from ff group by @row
step5: 最后再取max,并且concat
分享到:
相关推荐
1.或许有的人会用id+limit来实现上一条,下一条功能.但是.我们试想一下.有的业务并不是用id来排序的.那这样的方法就没效果...2.现在找到了生成rownum的方法,并且优化了执行速度. 3.直接上我项目里的sql,希望对大家有用.
同样地,如果你想在 MySQL 中模拟 Oracle 的分页查询,Oracle 原版写法如下: ```sql SELECT * FROM ( SELECT id, name FROM t ) WHERE ROWNUM (num); ``` 在 MySQL 中,你可以使用以下方式实现: ```sql SET @...
sql语句中select top n与oracle的rownum与mysql的limit 取前几条数据sql简单用法
1. **数据类型**:Oracle支持的数据类型如NUMBER、LONG、RAW等在MySQL中可能需要转换为DECIMAL、TEXT或BLOB。例如,Oracle的NUMBER可以转换为MySQL的DECIMAL或FLOAT,LONG可以转换为TEXT。 2. **分页查询**:Oracle...
在Oracle数据库中,`ROWNUM`是一个非常有用的伪列,用于限制查询结果的行数,尤其是在处理大数据量或进行分页查询时。然而,`ROWNUM`的使用并不直观,尤其是当涉及到比较运算符(如`>`, `>=`, `=`等)时,容易引发...
例如,MySQL支持的`LIMIT`在Oracle中需用`ROWNUM`或`FETCH FIRST`来实现分页;MySQL的`INFORMATION_SCHEMA`在Oracle中对应的是`DBA_`或`USER_`视图;此外,存储过程、触发器和函数的语法也有区别。 2. **数据类型...
在MySQL中,我们可以利用变量来模拟Rownum的效果。在提供的示例代码中,使用了一个用户定义的变量`@rownum`来计算行号。以下是具体的SQL查询语句: ```sql SELECT @rownum:=@rownum+1 AS rownum, a.order_id, ...
ROWNUM 是 Oracle 中的一种伪列,它可以根据返回记录生成一个序列化的数字。利用 ROWNUM,我们可以生产一些原先难以实现的结果输出,但是因为它是伪列的特殊性,在使用时需要注意一些事项,以免掉入“陷阱”。 特殊...
在IT行业的数据库管理与开发领域,SQL语言是不可或缺的一部分,尤其在关系型数据库如MySQL中,其作用更是举足轻重。今天,我们将深入探讨如何使用`DISTINCT`关键字在MySQL中查询多条不重复记录值,这不仅是一种实用...
本文将详细介绍 Oracle 中 ROWNUM 的使用方法,并与 SQL Server 中相应的功能进行对比分析。 #### Oracle ROWNUM 基础用法 1. **ROWNUM 的默认行为:** - 在 Oracle 中,ROWNUM 默认从 1 开始计数,对于每一行...
Oracle中rownum的使用
可如果用 select rownum,c1 from t1 where rownum > 10 (如果写下这样的查询语句,这时候在您的头脑中应该是想得到表中后面10条记录),你就会发现,显示出来的结果要让您失望了,也许您还会怀疑是不谁删了一些记录,...
例如,MySQL中的LIMIT关键字用于分页,而Oracle使用ROWNUM;MySQL的JOIN语法相对简单,Oracle则有更灵活的连接方式。 3. 数据类型:MySQL和Oracle支持的数据类型有所不同,比如MySQL有ENUM和SET类型,Oracle有BFILE...
注意:对 rownum(伪列) 只能使用 < 或 <=, 而用 =, >, >= 都将不能返回任何数据 例:查询工资前20名的员工姓名,工资 ,工资由高到低 Select rownum,first_name,salary from (Select first_name, salary ...
- 类型转换:Oracle的`TO_CHAR`和`TO_NUMBER`在MySQL中可能用`CONVERT`函数完成。 - `DECODE()`函数:在MySQL中可用`CASE WHEN`表达式替换,如`SELECT CASE WHEN a=b THEN c ELSE d END AS col1 FROM table1;` - ...
`rownum` 是 Oracle 数据库中的一个特殊字段,主要用于给查询结果集中的每一行分配一个唯一的序号,该序号从 1 开始递增。`rownum` 的主要用途之一是用于实现分页查询,即控制查询结果的数量。 #### 二、rownum与...
"Oracle 中的 ROWNUM 和 DISTINCT" Oracle 中的 ROWNUM 和 DISTINCT 是两个非常重要的关键词,它们在查询数据时发挥着至关重要的作用。然而,许多开发者在使用这两个关键词时,却常常会遇到一些不太理解的地方,...
- **去除特殊符号**:如MySQL中的反引号(``)需要被移除。 - **数据类型转换**: - `text`类型的字段转换为`varchar2(4000)`。 - `varchar`转换为`varchar2`。 - `tinyint(1)`变为`number(1)`。 - `int(4)`变为...
### Oracle中的ROWNUM使用详解 #### 一、ROWNUM简介 在Oracle数据库中,`ROWNUM`是一个非常有用的伪列,它为查询结果中的每一行分配一个唯一的行号。这个行号从1开始,每增加一行,行号就递增1。`ROWNUM`对于数据...
### Oracle中的ROWNUM使用详解 在Oracle数据库中,`ROWNUM`是一个非常有用的伪列,它可以帮助用户在查询结果集中为每一行分配一个唯一的行号。`ROWNUM`的值从1开始,并随着行的增加而递增。下面将详细介绍`ROWNUM`...