数据库查询不是 运行 想要的
DB Query not running as wanted
我的目标是从table公司(CNAME)分区中选择最高记录(按销售)并删除其他记录。
create table Tn(cname varchar(30), sale int);
Table 值:
CNAME SALE
1. Apple 4000
2. Apple 5000
3. Apple 4200
4. Samsung 3800
5. Samsung 3900
6. Samsung 3000
7. Samsung 3200
8. Nokia 800
9. Nokia 2000
10. Xiaomi 1100
11. Xiaomi 700
12. Lenovo 600
13. Lenovo 200
14. Lenovo 100
我的代码:
with Cte as
(
select cname,sale, dense_rank() over(partition by cname order by sale desc)as Ranker
from Tn
)
delete from cte where Ranker>1
select * from Tn;
现在我正在解决这个问题
ORA-00928: missing SELECT keyword
这个错误如果我不使用这个 select * from Tn;
即使我使用我也看不到 table 中的任何变化。
我是Oracle SQL Live 平台使用我的查询。请提出我的查询问题。
请提出不使用通用 Table 表达式的任何其他方式。
更新
我也试过这个:
delete from tn
where sale not in (select max(sale)as A
from tn
group by cname
order by A desc);
但是它说
ORA-00907: missing right parenthesis
有意思!我从未尝试从 CTE 中删除。相反,我只会插入我 想要 .
的记录
;with cte as
(
select *
from
(
select *
,DENSE_RANK() over(partition by cname order by sale)as Ranker
from Tn
)_
where Ranker = 1
)
select * from cte;
如果你想从原来的 table 中删除,那么 CTE
帮不了你。
您将需要如下内容:
Delete from tn where rowid in
(Select rid from
(select cname,
sale,
dense_rank() over(partition by cname order by sale desc)as Ranker,
rowid as rid
from Tn)
where ranker > 1)
干杯!!
我的目标是从table公司(CNAME)分区中选择最高记录(按销售)并删除其他记录。
create table Tn(cname varchar(30), sale int);
Table 值:
CNAME SALE
1. Apple 4000
2. Apple 5000
3. Apple 4200
4. Samsung 3800
5. Samsung 3900
6. Samsung 3000
7. Samsung 3200
8. Nokia 800
9. Nokia 2000
10. Xiaomi 1100
11. Xiaomi 700
12. Lenovo 600
13. Lenovo 200
14. Lenovo 100
我的代码:
with Cte as
(
select cname,sale, dense_rank() over(partition by cname order by sale desc)as Ranker
from Tn
)
delete from cte where Ranker>1
select * from Tn;
现在我正在解决这个问题
ORA-00928: missing SELECT keyword
这个错误如果我不使用这个 select * from Tn;
即使我使用我也看不到 table 中的任何变化。
我是Oracle SQL Live 平台使用我的查询。请提出我的查询问题。
请提出不使用通用 Table 表达式的任何其他方式。
更新
我也试过这个:
delete from tn
where sale not in (select max(sale)as A
from tn
group by cname
order by A desc);
但是它说
ORA-00907: missing right parenthesis
有意思!我从未尝试从 CTE 中删除。相反,我只会插入我 想要 .
的记录;with cte as
(
select *
from
(
select *
,DENSE_RANK() over(partition by cname order by sale)as Ranker
from Tn
)_
where Ranker = 1
)
select * from cte;
如果你想从原来的 table 中删除,那么 CTE
帮不了你。
您将需要如下内容:
Delete from tn where rowid in
(Select rid from
(select cname,
sale,
dense_rank() over(partition by cname order by sale desc)as Ranker,
rowid as rid
from Tn)
where ranker > 1)
干杯!!