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

Oracle SQL階層クエリ:階層をフラット化し、集約を実行する

    Podiluskaの提案は良いです。 Oracle 11g R2を使用している場合は、一般的なテーブル式が最適です。新しい構文の再帰的な性質により、sys_connect_by_pathを捨てることができます。 instrと組み合わせる 、これはパフォーマンスに深刻な悪影響を及ぼします。

    これを試してください:

    select
      child,
      sum(total_quantity) total_quantity
    from (
      with h (parent, child, isleaf, quantity, total_quantity) as (
        select 
          parent,
          child,
          isleaf,
          quantity,
          quantity total_quantity
        from
          itemhier
        where
          parent = 'ASSY001' 
        union all
        select
          ih.parent,
          ih.child,
          ih.isleaf,
          ih.quantity,
          ih.quantity * h.total_quantity total_quantity
        from
          itemhier ih
        join 
          h on h.child = ih.parent
      )
      select * from h
      where isleaf = 1
    )
    group by child;
    

    sqlfiddleは次のとおりです。 http://sqlfiddle.com/#!4/9840f/6



    1. すでにIDが割り当てられているpostgresqlにCSVをインポートするにはどうすればよいですか?

    2. MySQL:複数のテーブルまたは多くの列を持つ1つのテーブル?

    3. SUBSTRING_INDEXを使用してmysqlで文字列を分割したい

    4. このMYSQLクエリを作成する際に何が間違っていたのか理解できません