SELECT empno, deptno
dense_rank() OVER (PARTITION BY deptno
ORDER BY sal NULLS LAST) SRLNO
FROM emp
WHERE deptno IN (10, 20)
group by empno, deptno --,sal
ORDER BY deptno, SRLNO;
Run Code Online (Sandbox Code Playgroud)
此查询不起作用,因为它Sal应该在group by子句中.任何人都可以解释为什么会这样,并且有没有其他选择在不改变group by子句的情况下获得相同选择的排名?你想只根据工资订购排名.
编辑
假设在emp表中有另一个列名commision,我必须通过deptno和commision分组并仅通过deptno进行分区,那么建议的答案是什么:
SELECT empno, deptno,sum(sal)
dense_rank() OVER (PARTITION BY deptno
ORDER BY sal NULLS LAST) SRLNO
FROM emp
WHERE deptno IN (10, 20)
group by deptno,commision --,sal
ORDER BY deptno, SRLNO;
Run Code Online (Sandbox Code Playgroud)
现在我如何通过depno和commision进行分组,并且只能通过deptno进行分区.
如何在不同的列上进行分组并根据不同列的分区查找排名
select objectid
,name
,address
from library_t l
where not exists (select *
from d107 d
where l.objectid = d.objectid
)
select objectid
,name
,address
from library_t l
where l.objectid not in (select objectid
from d107
)
Run Code Online (Sandbox Code Playgroud)
如果两个objectid列都有索引,哪一个在oracle中更好?
我需要建立一个trigger以oracle 11g用于审核表.
我有一张表50 columns需要audited.
every new insert表格,我需要输入一个条目audit table (1 row).every update,假设我更新1st 2nd column,那么它将在审计中创建两个记录 old value and new value.审计表的结构将是
id NOT NULL
attribute NOT NULL
OLD VALUE NOT NULL
NEW VALUE NOT NULL
cre_date NOT NULL
upd_date NULL
cre_time NOT NULL
upd_time NULL
Run Code Online (Sandbox Code Playgroud)
在情况下insert,只有主键(主表),即中id 和cre_date and cre_time需要填充和attribute等于*,在更新的情况下,假设可乐COLB正在更新,那么所有需要被populated.In这种情况下,两个记录将被创建第一条记录的属性colA和相应的old and new值,并且相同 …
我有一个控制文件,loader.ctl,in C:\oracle\product\10.2.0\oradata\orcl.
loader.ctl文件的内容是
load data
infile 'd:\mydata\test.csv'
into table emp1
fields terminated by "," optionally enclosed by '"'
( empno, ename,job,mgr,hiredate,sal,comm,deptno )
Run Code Online (Sandbox Code Playgroud)
emp1 table已存在于数据库中,test.csv中有9条记录
我从sqlldr执行了loader.ctl:

现在,当我检查我的数据库时,我发现没有记录emp1...为什么会这样?提交之后为什么表中没有填充数据?
CREATE TABLE TEMP25
(
STATUS VARCHAR2(200 BYTE)
);
Insert into TEMP25
(STATUS)
Values
('PENDING');
Insert into TEMP25
(STATUS)
Values
('ERROR');
Insert into TEMP25
(STATUS)
Values
('ERROR');
Insert into TEMP25
(STATUS)
Values
('ERROR');
Insert into TEMP25
(STATUS)
Values
('NOT_REQUIRED');
Insert into TEMP25
(STATUS)
Values
('NOT_REQUIRED');
Insert into TEMP25
(STATUS)
Values
('PENDING');
Insert into TEMP25
(STATUS)
Values
('PENDING');
Insert into TEMP25
(STATUS)
Values
('ERROR');
Insert into TEMP25
(STATUS)
Values
('NOT_REQUIRED');
Insert into TEMP25
(STATUS)
Values
('ERROR');
Insert into TEMP25
(STATUS)
Values
('INVALID'); …Run Code Online (Sandbox Code Playgroud) 我有以下数据集
Run Code Online (Sandbox Code Playgroud)a b c `1` 2 3 3 6 9 9 2 11
如您所见,列a的第一个值是固定的(即1),但是从第二行开始,它会获取前一个记录的列c的值.
列b的值是随机的,列c的值计算为c = a + b
我需要编写一个sql查询,它将以上述格式选择这些数据.我尝试使用滞后函数编写,但无法实现.
请帮忙.
编辑:
列b只存在于表中,a and c需要根据值计算b.
Hanumant
任何人都可以解释如何在Oracle解释计划中评估成本吗?是否有任何特定的算法来确定查询的成本?
例如:全表扫描,具有较高的性价比,索引扫描下... Oracle如何评估情况的 full table scan,index range scan等等?
此链接与我要求的相同:关于Oracle解释计划中的成本的问题
但是,任何人都可以用一个例子来解释,我们可以通过执行找到成本explain plan,但它如何在内部工作?
以下SQL生成具有相同模式的两个表之间的所有匹配记录,然后继续迭代存储此结果集的游标.我在这个函数的末尾用行提交逐行插入.我的问题是如何从这种类型的查询中获得最大的性能?代码如下:
BEGIN
DECLARE
CURSOR foo IS
SELECT * FROM tableOne to
WHERE EXISTS (SELECT * FROM tableTwo tt
WHERE TO.FOO = TT.FOO
AND TO.BAR = TT.BAR); --THIS TAKES 5 MINUTES (66 MILLION ROWS)
BEGIN
FOR nextFoo IN foo
LOOP
INSERT INTO tracker t
(id,foo,bar,baz)
VALUES(trackerSequence.nextval, nextFoo.foo,nextFoo.bar,nextFoo.baz);
END LOOP;
COMMIT;
END;
END;
Run Code Online (Sandbox Code Playgroud)
此查询可能需要一个多小时,我正在尝试减少与之相关的时间成本.我将处理一般的1.4亿条记录,所以我希望这个过程花费的时间加倍.所有列都已编制索引.
版本信息:
10克10.2
我在运行一个程序时遇到了一个奇怪的问题.
Proc如下所示:
procedure abc
IS
CURSOR xyz_cur IS
SELECT x
,y
,z
from temp
where y IN ('abc'.'pqr'.'def','sql','pqw')
for update nowait;
BEGIN
open xyz_cur ;
:
:
END abc;
Run Code Online (Sandbox Code Playgroud)
现在更早的光标查询没有'sql','pqw'.我已经用这两个varchar值扩展了这个IN语句.并且表temp在列y上有一个check constaint,我也扩展了check constaints.
现在我怎么能解决我的问题,它没有我最近添加的两个值,它运作良好.
我试过的,我已经分析了表并重建索引,但仍然没有运气.请帮助我
oracle ×9
sql ×5
oracle10g ×4
oracle11g ×4
performance ×2
analytical ×1
database ×1
lag ×1
logic ×1
plsql ×1
query-tuning ×1
sql-loader ×1
triggers ×1