【oracle】查本当连续无重复的序列有无重复,重复多少个,再清除重复项

这是一次实验,为这次实验需要准备一张表,建表语句如下。

create table emp1(
id int,
name nvarchar2(20));

为了让这表的id字段有重复可以这样给它插值:

insert into emp1
select dbms_random.value(1,1000),
dbms_random.string('*',dbms_random.value(1,20))
from dual
connect by level<2000;

然后,对id分组,查看每组中数量多于一个的就大体知道重复的情况了。

select count(*) as cnt,id from emp1 group by id having count(*)>1

要知道将要删除多少数据可以把上面的语句做个子查询,然后把cnt字段统计起来。

select sum(cnt) from 
(select count(*)-1 as cnt from emp1 group by id having count(*)>1)

上面多了一个-1,那是因为重复的组还需要保留一条。

也可以执行下面的语句查看将要删除的记录数。

select count(*) from emp1 a where a.rowid<(select max(rowid) from emp1 b where a.id=b.id)

要删除重复记录把上面的语句从查询改成删除就好了。

delete from emp1 a where a.rowid<(select max(rowid) from emp1 b where a.id=b.id)

删完后,就可以给id列加上主键了。

alter table emp1 add constraint emp1_pk primary key(id);

上面实验所有的SQL执行情况如下:

  1 SQL> drop table emp1;
  2 
  3 表已删除。
  4 
  5 SQL> create table emp1(
  6   2  id int,
  7   3  name nvarchar2(20));
  8 
  9 表已创建。
 10 
 11 SQL> insert into emp1
 12   2  select dbms_random.value(1,1000),
 13   3  dbms_random.string('*',dbms_random.value(1,20))
 14   4  from dual
 15   5  connect by level<2000;
 16 
 17 已创建1999行。
 18 
 19 SQL> commit;
 20 
 21 提交完成。
 22 
 23 SQL> select count(*) as cnt,id from emp1 group by id having count(*)>1;
 24 
 25        CNT         ID
 26 ---------- ----------
 27          3        785
 28          4        465
 29          5        742
 30          3        180
 31          2        604
 32          3        861
 33          2        670
 34          2        787
 35          3        310
 36          3        477
 37          2        647
 38 
 39        CNT         ID
 40 ---------- ----------
 41          2        606
 42          3        380
 43          2        619
 44          3        851
 45          6        719
 46          3        730
 47          3        167
 48          4        363
 49          3        100
 50          3        756
 51          3        665
 52 
 53        CNT         ID
 54 ---------- ----------
 55          2        400
 56          4         83
 57          2        889
 58          2        555
 59          2        729
 60          3        918
 61          2        309
 62          2        691
 63          4        123
 64          2        614
 65          2        967
 66 
 67        CNT         ID
 68 ---------- ----------
 69          3        786
 70          3        658
 71          4         34
 72          2        468
 73          3        472
 74          4        988
 75          4        198
 76          2        692
 77          3        498
 78          2        337
 79          3         30
 80 
 81        CNT         ID
 82 ---------- ----------
 83          2         51
 84          3        964
 85          2        247
 86          3        355
 87          2       1000
 88          2        625
 89          2        724
 90          4        789
 91          2        537
 92          4         54
 93          3        408
 94 
 95        CNT         ID
 96 ---------- ----------
 97          2        878
 98          2        989
 99          2        948
100          2        173
101          2        826
102          3        303
103          2        584
104          4        679
105          3        895
106          4         44
107          4         28
108 
109        CNT         ID
110 ---------- ----------
111          2        974
112          4        209
113          2        457
114          2        976
115          2         47
116          4        218
117          3        620
118          4        290
119          2        462
120          2        475
121          3        157
122 
123        CNT         ID
124 ---------- ----------
125          5        394
126          3        534
127          2        134
128          3        903
129          2        728
130          3         76
131          2        522
132          3        459
133          2        128
134          6        235
135          7        541
136 
137        CNT         ID
138 ---------- ----------
139          2        494
140          2        631
141          3        356
142          3        387
143          3          6
144          3         29
145          3        949
146          2        217
147          5        762
148          4        558
149          4        883
150 
151        CNT         ID
152 ---------- ----------
153          4        435
154          2        807
155          4        779
156          2        518
157          3        424
158          2        469
159          3        652
160          3        369
161          2         59
162          2        120
163          2        671
164 
165        CNT         ID
166 ---------- ----------
167          2        696
168          3        307
169          2         13
170          2        608
171          2        985
172          2        821
173          2        573
174          2        607
175          3        642
176          5        880
177          2        844
178 
179        CNT         ID
180 ---------- ----------
181          3        121
182          4        923
183          2        682
184          2        651
185          2        965
186          2        386
187          2        271
188          2        560
189          2        207
190          5        299
191          4        894
192 
193        CNT         ID
194 ---------- ----------
195          3        155
196          3        378
197          3        862
198          2        297
199          2        708
200          2        966
201          2        854
202          3        327
203          2        853
204          2        827
205          3        141
206 
207        CNT         ID
208 ---------- ----------
209          3        587
210          4        858
211          2        492
212          3        181
213          5        782
214          2         70
215          3        881
216          3        250
217          2        774
218          2        479
219          5        715
220 
221        CNT         ID
222 ---------- ----------
223          3        538
224          2        983
225          5        628
226          3        390
227          6        253
228          3         90
229          2        425
230          2        418
231          3         26
232          3        251
233          3        793
234 
235        CNT         ID
236 ---------- ----------
237          3        535
238          3        543
239          2        429
240          2        340
241          2        657
242          2        713
243          3        993
244          2        444
245          5        937
246          3        586
247          2        463
248 
249        CNT         ID
250 ---------- ----------
251          3        567
252          3        410
253          3        570
254          3        806
255          3        461
256          3        377
257          3         21
258          4        298
259          3        596
260          2        433
261          4        899
262 
263        CNT         ID
264 ---------- ----------
265          7        229
266          4        258
267          2        502
268          2        992
269          2        249
270          2        917
271          2        132
272          2        572
273          2         86
274          2        626
275          2        704
276 
277        CNT         ID
278 ---------- ----------
279          3        112
280          3        758
281          3        500
282          3        661
283          3        382
284          2        365
285          4        273
286          2        935
287          3        185
288          3        412
289          3        727
290 
291        CNT         ID
292 ---------- ----------
293          2        941
294          2        205
295          2        593
296          4        962
297          2        177
298          2        874
299          3        404
300          3        648
301          3         20
302          2        224
303          2         66
304 
305        CNT         ID
306 ---------- ----------
307          2        149
308          5        133
309          2        499
310          2        896
311          3         96
312          2        565
313          2        991
314          2        687
315          4        532
316          4        215
317          3        694
318 
319        CNT         ID
320 ---------- ----------
321          5        556
322          2        891
323          3        374
324          5        329
325          3        284
326          3        945
327          3        432
328          3        867
329          2        549
330          5        697
331          3        360
332 
333        CNT         ID
334 ---------- ----------
335          3        367
336          4        183
337          6        191
338          3        609
339          3        416
340          4        439
341          4        496
342          2        300
343          3        505
344          2        163
345          3         46
346 
347        CNT         ID
348 ---------- ----------
349          2        270
350          2         53
351          2        744
352          3        845
353          3        117
354          2         24
355          5        164
356          4         81
357          3        296
358          4        764
359          4        521
360 
361        CNT         ID
362 ---------- ----------
363          3        467
364          4        720
365          2        359
366          3         85
367          3        685
368          3        162
369          4        613
370          2        398
371          4        354
372          2        622
373          3        240
374 
375        CNT         ID
376 ---------- ----------
377          2        526
378          3        161
379          3        741
380          4        201
381          2        669
382          2        542
383          5        583
384          3        349
385          2        314
386          3        119
387          2        285
388 
389        CNT         ID
390 ---------- ----------
391          4        887
392          3        509
393          2        184
394          2        836
395          2        510
396          2         32
397          4        777
398          4        698
399          2         35
400          4        663
401          4        959
402 
403        CNT         ID
404 ---------- ----------
405          4         48
406          2        820
407          6        212
408          3        453
409          4        721
410          3        592
411          4        938
412          4        848
413          4        336
414          4        392
415          2        276
416 
417        CNT         ID
418 ---------- ----------
419          3        350
420          2        533
421          2        553
422          2        840
423          2        710
424          3         23
425          3        995
426          2        516
427          2         61
428          2          8
429          3         55
430 
431        CNT         ID
432 ---------- ----------
433          4        849
434          6        175
435          2        977
436          3        634
437          3        301
438          2        908
439          2        761
440          2        389
441          2        707
442          2        456
443          3        527
444 
445        CNT         ID
446 ---------- ----------
447          4        264
448          3        206
449          3        110
450          2        830
451          3        603
452          3        879
453          3        689
454          5        664
455          5        135
456          5         37
457          3        754
458 
459        CNT         ID
460 ---------- ----------
461          2        426
462          2        637
463          4        856
464          2        318
465          3        783
466          2        629
467          2        987
468          3        328
469          3         69
470          3        344
471          3        239
472 
473        CNT         ID
474 ---------- ----------
475          2        402
476          2        654
477          3        550
478          5        700
479          2        686
480          2        750
481          2        486
482          4        342
483          2        370
484          2        226
485          2        831
486 
487        CNT         ID
488 ---------- ----------
489          2        748
490          2        449
491          2        799
492          3        375
493          4        430
494          5        261
495          3        568
496          2         41
497          2        451
498          4        228
499          3         33
500 
501        CNT         ID
502 ---------- ----------
503          2        443
504          2        563
505          2        575
506          5        508
507          3        994
508          2         93
509          3        266
510          2        736
511          4        130
512          2        341
513          2        952
514 
515        CNT         ID
516 ---------- ----------
517          3        368
518          2        798
519          4         80
520          3        277
521          4        107
522          4        585
523          2        946
524          2        866
525          3        926
526          2        376
527          2        643
528 
529        CNT         ID
530 ---------- ----------
531          2        828
532          3        956
533          2        514
534          3        850
535          2        913
536          3        254
537          6        915
538          3        886
539          3        101
540          2        795
541          2         99
542 
543        CNT         ID
544 ---------- ----------
545          2        973
546          3        659
547          3        939
548          4        667
549          2        140
550          6        876
551          2        591
552          3        545
553          2        525
554          2        909
555          2        233
556 
557        CNT         ID
558 ---------- ----------
559          3        434
560          5        792
561          2        440
562          4        898
563          4        512
564          4        753
565          3        165
566          2        436
567          2        766
568          3        362
569          2        598
570 
571        CNT         ID
572 ---------- ----------
573          3        942
574          2        243
575          2        900
576          2        238
577          2        131
578          2        873
579          4        552
580          4        334
581          3        511
582          4        476
583          3        953
584 
585        CNT         ID
586 ---------- ----------
587          3        401
588          4         36
589          2        981
590          4         18
591          2        546
592          2        414
593          5        822
594          2        259
595          3        760
596          3        172
597          2        421
598 
599        CNT         ID
600 ---------- ----------
601          2        969
602          2        287
603          2         27
604          3        927
605          3        871
606          5        503
607          4        530
608          3        176
609          4        971
610          2        236
611          2        146
612 
613        CNT         ID
614 ---------- ----------
615          5        186
616          2         64
617          3        716
618          5        984
619          4        910
620          4        924
621          2        124
622          7        579
623          4        746
624          2        490
625          2        221
626 
627        CNT         ID
628 ---------- ----------
629          3        751
630          3        890
631          5        145
632          3        517
633          5        865
634          2          3
635          4        446
636          5        547
637          3        171
638          2        907
639          3        442
640 
641        CNT         ID
642 ---------- ----------
643          2        819
644          3        788
645          2        142
646          2        863
647          4        405
648          2        870
649          4        278
650          4        304
651          2        998
652          2        864
653          5         89
654 
655        CNT         ID
656 ---------- ----------
657          2        571
658          3        319
659          2         58
660          2        936
661          4        454
662          2        884
663          2        641
664          2        722
665          2        911
666          3        115
667          2        154
668 
669        CNT         ID
670 ---------- ----------
671          3        928
672          2        612
673          2        808
674          2        267
675          2          7
676          6        174
677          4         62
678          3        345
679          2        388
680          4          9
681          3        406
682 
683        CNT         ID
684 ---------- ----------
685          3        139
686          2        838
687          2        524
688          3        705
689          6        305
690          2        551
691          3        842
692          5        204
693          7        812
694          5        737
695          3        493
696 
697        CNT         ID
698 ---------- ----------
699          2        531
700          5        281
701          2        282
702          4         16
703          3        617
704          2        752
705          3        940
706          4        961
707          2        676
708          2         12
709          4        796
710 
711        CNT         ID
712 ---------- ----------
713          3        706
714          6        197
715          2        809
716          3        501
717          3        160
718          2        373
719          2        885
720          3        548
721          4        768
722          3        960
723          3        802
724 
725        CNT         ID
726 ---------- ----------
727          6        428
728          2        690
729          3        103
730          2        539
731          5        602
732          3         60
733          3         67
734          2         10
735          2        118
736          2        219
737          2        487
738 
739        CNT         ID
740 ---------- ----------
741          4        272
742          2        711
743          4        818
744          2         92
745          2        348
746          2        237
747          3        488
748          3        660
749          3        448
750          2         73
751          2        912
752 
753        CNT         ID
754 ---------- ----------
755          2         39
756          2         79
757          4        958
758          2        361
759          2        589
760          4        156
761          2         65
762          2        127
763          2        644
764          2        317
765          3        320
766 
767        CNT         ID
768 ---------- ----------
769          4        930
770          2        302
771          2         19
772          2        843
773          2        800
774          2        823
775          2        656
776          3        624
777          2        666
778          2        106
779          2        794
780 
781        CNT         ID
782 ---------- ----------
783          2        150
784          2        126
785          3        346
786          3        313
787          3        122
788 
789 已选择599行。
790 
791 SQL> select sum(cnt) from
792   2  (select count(*)-1 as cnt from emp1 group by id having count(*)>1);
793 
794   SUM(CNT)
795 ----------
796       1137
797 
798 SQL> select count(*) from emp1 a where a.rowid<(select max(rowid) from emp1 b where a.id=b.id);
799 
800   COUNT(*)
801 ----------
802       1137
803 
804 SQL> delete from emp1 a where a.rowid<(select max(rowid) from emp1 b where a.id=b.id);
805 
806 已删除1137行。
807 
808 SQL> alter table emp1 add constraint emp1_pk primary key(id);
809 
810 表已更改。
811 
812 SQL>

-END-

原文地址:https://www.cnblogs.com/heyang78/p/15183034.html