sql >> データベース >  >> RDS >> Oracle

値ごとに全体的に一意のレコードの数を取得します

    テスト用のテーブルを作成しました:

    create table nr_pvo_120 (
       otherid,
       fax
    )
    as
    select 12365092    , 2762364204 from dual union all
    select 12005656    , 2762364204 from dual union all
    select 12484936    , 2762364204 from dual union all
    select 39003042    , 2762364204 from dual union all
    select 12365597    , 2762364204 from dual union all
    select 12635922    , 2762364204 from dual union all
    select 12332346    , 2762364204 from dual union all
    select 12365092    , 4387267572 from dual union all
    select 12005656    , 4387267572 from dual union all
    select 12365092    , 4422911281 from dual union all
    select 12005656    , 4422911281 from dual union all
    select 12484936    , 4422911281 from dual union all
    select 12651239    , 4422911281 from dual union all
    select 12388710    , 4422911281 from dual union all
    select 12686953    , 4422911281 from dual union all
    select 12365092    , 4423311213 from dual union all
    select 12005656    , 4423311213 from dual union all
    select 12709544    , 4423311213 from dual union all
    select 12484936    , 4423311213 from dual union all
    select 12005656    , 4424450542 from dual union all
    select 12346839    , 4424450542 from dual union all
    select 12365120    , 4424450542 from dual union all
    select 12484936    , 4424450542 from dual union all
    select 12086512    , 4424450542 from dual
    /
    

    私の最初のショットは次のようになります:各人(otherid)について最初を取得します ファックス番号のみを送信してから、通常のグループ化を行い、それを頼りにします。

    select first_fax, count(*) firstcount
      from (
       select otherid, min(fax) first_fax
         from nr_pvo_120
        group by otherid
           )
     group by first_fax
     order by first_fax
    /
    

    出力は次のようになります:

     FIRST_FAX FIRSTCOUNT
    ---------- ----------
    2762364204          7
    4422911281          3
    4423311213          1
    4424450542          3
    

    次に、希望する出力に5番目のFAX番号が含まれているが、カウントがゼロであることに気付きました。これは、たとえば次のように実行できます。

    select fax, count(*) normalcount, count(otherid_on_first_fax) countunused
      from (
       select fax, otherid,
              case
                 when fax = min(fax) over (partition by otherid order by fax)
                 then otherid
              end otherid_on_first_fax
         from nr_pvo_120
           )
     group by fax
     order by fax
    /
    

    この出力では、列NORMALCOUNT そのファックスを持っている人の数です。列COUNTUNUSED まだ「使用」されていない人の数です。 以前のカウント:

           FAX NORMALCOUNT COUNTUNUSED
    ---------- ----------- -----------
    2762364204           7           7
    4387267572           2           0
    4422911281           6           3
    4423311213           4           1
    4424450542           5           3
    

    秘訣は、otherid_on_first_fax otheridの値のみがあります 個人の最初のFAX番号、残りの個人のFAX番号otherid_on_first_fax 無効です。 count(otherid_on_first_fax) 次に、null以外のすべての値をカウントしますが、ファックス4387267572にはありません。



    1. DBユーザーパスワードをコマンドラインツールmysqladminに渡す方法はありますか?

    2. このMySQLテーブルを最もパフォーマンスの高い方法でクエリする方法は?

    3. Java8でのSQLServerJDBCエラー:ドライバーは、Secure Sockets Layer(SSL)暗号化を使用してSQLServerへの安全な接続を確立できませんでした

    4. MySQLは一致する文字列の最大長を選択します