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

親アセンブリで販売されたコンポーネントの数量を計算するSQLクエリを作成するにはどうすればよいですか? (Postgres 11 /再帰CTE?)

    基本的にあなたは解決策を持っています。数量とカテゴリもCTEに保存した場合は、WHEREを追加するだけです。 フィルタとSUM その後の集計:

    SELECT
        child_name,
        SUM(sold_quantity * child_quantity)
    FROM cte
    WHERE category = 'component'
    GROUP BY child_name
    

    私のクエリ全体は次のようになります(上記の詳細のみがあなたのクエリと異なります):

    demo:db <> fiddle

    WITH RECURSIVE cte AS (
        SELECT 
            s.sold_name,
            s.sold_quantity,
            r.child_name,
            r.child_quantity,
            nc.thing_category as category
        FROM 
            sales s
        JOIN relator r
        ON s.sold_name = r.parent_name
        JOIN names_categories nc
        ON r.child_name = nc.thing_name
        
        UNION ALL
        
        SELECT
            cte.sold_name,
            cte.sold_quantity,
            r.child_name,
            r.child_quantity,
            nc.thing_category
        FROM cte
        JOIN relator r ON cte.child_name = r.parent_name
        JOIN names_categories nc
        ON r.child_name = nc.thing_name
    )
    SELECT
        child_name,
        SUM(sold_quantity * child_quantity)
    FROM cte
    WHERE category = 'component'
    GROUP BY child_name
    

    注:既に持っているデータを結合するよりも、テーブルから直接データをフェッチする方が便利であることがわかったため、ビューは使用しませんでした。しかし、それは私が個人的に好きな方法です:)



    1. MySQLとSQLiteの両方に固有の制約と挿入または更新

    2. Rails / postgres、「外部キー」を配列に格納して1-多くの関連付けを作成

    3. Oracleの日付形式

    4. (PHP):警告:include_once、ストリームを開くことができませんでした:アクセスが拒否されました