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

5つのテーブルを使用してクエリを生成する

    これが仕事を成し遂げるかもしれないアプローチです。ロジックは、集約サブクエリを使用して中間計算を実行することです。

    このクエリは、On_saleから収益を取得します 年ごとの表。

    SELECT 
        YEAR(sale_date) yr, 
        SUM(sale_price) amt
    FROM 
        On_sale
    GROUP BY 
        YEAR(sale_date);
    

    この他のクエリは、テーブルSoldを使用して、店舗ごとおよび年間の収益を取得します。 およびProduct

    SELECT 
        s.store_number, 
        YEAR(s.sold_date) yr, 
        SUM(s.sold_quantity * p.retail_price) amt
    FROM 
        Sold s
        INNER JOIN Product p 
            ON p.pid = s.pid
    GROUP BY 
        s.store_number, 
        YEAR(sold_date);
    

    これで、JOINができます Cityを使用したこれらのクエリの結果 およびStore テーブル。同時に、都市をさまざまなサイズのカテゴリに分割し、それを使用して結果を集計できます。 LEFT JOINを使用しています サブクエリの1つが空の結果セットを生成する場合(それ以外の場合、INNER JOIN 大丈夫です):

    SELECT 
        COALESCE(sa.yr, so.yr) sale_year,
        CASE 
            WHEN c.population > 200 THEN 'large'
            WHEN c.population <= 200 AND c.population > 100 THEN 'medium'
            ELSE 'small'
        END as size_range,
        SUM(COALESCE(so.amt, 0) + COALESCE(sa.amt, 0)) revenue
    FROM 
        City c
        INNER JOIN Store st 
            ON  st.state = c.state 
            AND st.city_name = c.city_name
        LEFT JOIN (
            SELECT 
                s.store_number, 
                YEAR(s.sold_date) yr, 
                SUM(s.sold_quantity * p.retail_price) amt
            FROM 
                Sold s
                INNER JOIN Product p 
                    ON p.pid = s.pid
            GROUP BY 
                s.store_number, 
                YEAR(sold_date)
        ) so 
            ON  so.store_number = st.store_number
        LEFT JOIN (
            SELECT 
                YEAR(sale_date) yr, 
                SUM(sale_price) amt
            FROM 
                On_sale
            GROUP BY 
                YEAR(sale_date)
        ) sa 
            ON  sa.yr = so.yr
    GROUP BY
        sale_year,
        size_range
    ORDER BY
        sale_year,
        size_range
    

    このDBFiddleのデモ サンプルデータを使用して、中間ステップを示し、最後に次を返します。

    | sale_year | size_range | revenue |
    | --------- | ---------- | ------- |
    | 2017      | small      | 15      |
    | 2018      | medium     | 14      |
    | 2019      | large      | 12      |
    



    1. 結合されたテーブルでmysql_fetch_arrayを実行する方法ですが、列の名前は同じです

    2. Activerecord:特定の列とアソシエーションのアソシエーションカウントを取得します

    3. 挿入/更新を含むhtml/php/sqlフォーム

    4. MySQL空間インデックスを使用して5つの最も近いネイバーを取得するための正規化データベースの設計