在一个表里,有很多字段,每个字段的值有很多重复的,让你用写个SQL语句,把每个字段中出现次数最多的值列出来,并在这个值的前面加上一个-1,比如有年龄和工资两个字段,里面出理次数最多的是18和3000,找出来并改成-118和-13000

解决方案 »

  1.   

    SQL> select age,sal from test;       AGE        SAL
    ---------- ----------
            18       3000
            17       3200
            18       2500
            19       3000
            21       3100
            18       3100
            21       3000
            19       3500
            18       2800
            20       300010 rows selectedSQL> 
    SQL> SELECT '-1' || MAX(age) keep(DENSE_RANK LAST ORDER BY age_cnt) age_max,
      2         '-1' || MAX(sal) keep(DENSE_RANK LAST ORDER BY sal_cnt) sal_max
      3    FROM (SELECT t.*,
      4                 COUNT(*) over(PARTITION BY age) age_cnt,
      5                 COUNT(*) over(PARTITION BY sal) sal_cnt
      6            FROM test t)
      7  /AGE_MAX                                    SAL_MAX
    ------------------------------------------ ------------------------------------------
    -118                                       -13000
      

  2.   

    不好意思,再问下,那个keep和over是什么?函数吗?从来没用过,到哪儿找相关的讲解呢?
      

  3.   

    分析函数
    lz自己baidu一下吧