請問,有沒有mysql和Oracle都能兼容的陳述句實作row number功能,在mysql中用if方法可以實作row number功能,但在Oracle 中if不能兼容。請教各位大神有沒有一種寫法兩種資料庫都可以實作row number功能的陳述句,感謝,除max外
uj5u.com熱心網友回復:
可以考慮使用mysql 8.0 ,這個有分析函式。uj5u.com熱心網友回復:
統一用的是mysql 5.7
uj5u.com熱心網友回復:
create table test_190507(part VARCHAR(50), val1 NUMERIC, val2 NUMERIC);
insert into test_190507(part, val1, val2) values ('a', 1, 4);
insert into test_190507(part, val1, val2) values ('a', 2, 3);
insert into test_190507(part, val1, val2) values ('a', 3, 2);
insert into test_190507(part, val1, val2) values ('a', 4, 1);
insert into test_190507(part, val1, val2) values ('b', 1, 4);
insert into test_190507(part, val1, val2) values ('b', 1, 3);
insert into test_190507(part, val1, val2) values ('b', 2, 2);
insert into test_190507(part, val1, val2) values ('c', 1, 3);
insert into test_190507(part, val1, val2) values ('c', 2, 2);
with tab0 as(
select * from test_190507 t1
order by t1.part, t1.val1 --對應order by
)
, tab1 as (
select t1.*, rownum rn from tab0 t1
)
select t1.*, t1.rn - t2.mn + 1 row_number from tab1 t1,
(select t1.part, count(1) ct, min(t1.rn) mn from tab1 t1
group by t1.part --對應partition by
) t2
where t1.part = t2.part
order by t1.rn
;
drop table test_190507;
uj5u.com熱心網友回復:
mysql不能用with as臨時表的
uj5u.com熱心網友回復:
直接在里面套
uj5u.com熱心網友回復:
請問,有沒有mysql和Oracle都能兼容的陳述句實作row number功能,在mysql中用if方法可以實作row number功能,但在Oracle 中if不能兼容。請教各位大神有沒有一種寫法兩種資料庫都可以實作row number功能的陳述句,感謝,除max外
你的版本,沒有。
uj5u.com熱心網友回復:
create table test_190507(part VARCHAR(50), val1 NUMERIC, val2 NUMERIC);
insert into test_190507(part, val1, val2) values ('a', 1, 4);
insert into test_190507(part, val1, val2) values ('a', 2, 3);
insert into test_190507(part, val1, val2) values ('a', 3, 2);
insert into test_190507(part, val1, val2) values ('a', 4, 1);
insert into test_190507(part, val1, val2) values ('b', 1, 4);
insert into test_190507(part, val1, val2) values ('b', 1, 3);
insert into test_190507(part, val1, val2) values ('b', 2, 2);
insert into test_190507(part, val1, val2) values ('c', 1, 3);
insert into test_190507(part, val1, val2) values ('c', 2, 2);
with tab0 as(
select * from test_190507 t1
order by t1.part, t1.val1 --對應order by
)
, tab1 as (
select t1.*, rownum rn from tab0 t1
)
select t1.*, t1.rn - t2.mn + 1 row_number from tab1 t1,
(select t1.part, count(1) ct, min(t1.rn) mn from tab1 t1
group by t1.part --對應partition by
) t2
where t1.part = t2.part
order by t1.rn
;
drop table test_190507;
這似乎都是oracle語法。
uj5u.com熱心網友回復:
有沒有那句話(是陳述句,不是詞。)是漢語和英語,都通用的。即使有,也是可以忽略的概率。好多時候,同一個系統,可能不同的用戶會選擇不同的資料庫,所以有些時候會考慮,能否把系統中的SQL寫出不同資料庫都可以支持的。
其實不同的資料庫,肯定是有差異的,除非系統超級簡單,否則很難把所有陳述句,都修改成支持不同資料庫的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/16410.html
標籤:高級技術
上一篇:在Win7旗艦版系統安裝Oracle 11g R2 Database服務器端(64位)的經驗
下一篇:Mariadb之復制過濾器
