【大话IT】over() 分组后如何增加一个 伪列。

[复制链接]
查看11 | 回复9 | 2014-10-28 06:00:13 | 显示全部楼层 |阅读模式
列1,
伪列

回复

使用道具 举报

千问 | 2014-10-28 06:00:13 | 显示全部楼层


如下:
SQL> with t as
2(
3select 'A' col_a from dual
4union all
5select 'A' col_a from dual
6union all
7select 'B' col_a from dual
8union all
9select 'B' col_a from dual
10union all
11select 'C' col_a from dual
12union all
13select 'C' col_a from dual
14)
15select col_a,
16 dense_rank() over(order by col_a) new_col
17from t
18/
COL_ANEW_COL
----- ----------
A
1
A
1
B
2
B
2
C
3
C
3
6 rows selected


SQL>

回复

使用道具 举报

千问 | 2014-10-28 06:00:13 | 显示全部楼层
本帖最后由 yaksha1 于 2015-6-25 16:49 编辑
bell6248 发表于 2015-6-25 16:43
如下:
SQL> with t as
谢谢成功了。 不知道还有其他方法吗?
我的本意是想给多列分组,然后增加伪列。

回复

使用道具 举报

千问 | 2014-10-28 06:00:13 | 显示全部楼层
本帖最后由 bell6248 于 2015-6-25 16:51 编辑
yaksha1 发表于 2015-6-25 16:45
dense_rank()没成功啊。不行
你用具体的数据举例,然后把要的最终结果贴一下

回复

使用道具 举报

千问 | 2014-10-28 06:00:13 | 显示全部楼层
bell6248 发表于 2015-6-25 16:48
如上不是已经提供测试结果了,那里不行?

可以,成功了,谢谢
非常好,就是想多问一下,还有其它方法吗?谢谢啊
回复

使用道具 举报

千问 | 2014-10-28 06:00:13 | 显示全部楼层
yaksha1 发表于 2015-6-25 16:50
可以,成功了,谢谢
非常好,就是想多问一下,还有其它方法吗?谢谢啊

这种用分析函数效率最高,其他的就是用自联结的方法,效率很低,具体实现方法可以search一下
回复

使用道具 举报

千问 | 2014-10-28 06:00:13 | 显示全部楼层
版主的方法是最简单明了的。
WITH t AS (
SELECT 'A' c1 from dual
UNION ALL SELECT 'A'from dual
UNION ALL SELECT 'B'from dual
UNION ALL SELECT 'B'from dual
UNION ALL SELECT 'C'from dual
UNION ALL SELECT 'C'from dual
)
, t2 AS (SELECT c1,LEAD(c1) OVER(PARTITION BY c1 ORDER BY c1) c2 FROM t)
SELECT c1,SUM(CASE WHEN c1=c2 THEN 1 ELSE 0 END) OVER (ORDER BY c1)c3 FROM t2
回复

使用道具 举报

千问 | 2014-10-28 06:00:13 | 显示全部楼层
这个头像好黑。。。。
回复

使用道具 举报

千问 | 2014-10-28 06:00:13 | 显示全部楼层
xxzzycq 发表于 2015-6-25 17:13
版主的方法是最简单明了的。
WITH t AS (
SELECT 'A' c1 from dual

因为lz要在分组间排序,所以partition用处不大
回复

使用道具 举报

千问 | 2014-10-28 06:00:13 | 显示全部楼层
本帖最后由 yaksha1 于 2015-6-25 21:47 编辑
bell6248 发表于 2015-6-25 16:48
你用具体的数据举例,然后把要的最终结果贴一下
用了这个办法,但是不知道如何排序
因为生成的伪列并不是 按照1,2,3来排序的 ,比如我想把B的伪列变成1C的伪列变成2,A的伪列变成3. 就是按我指定的顺序生成伪列。

列1,
伪列
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行