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

月の合計値を各日に割り当てます

    demos:db <> fiddle

    SELECT
        s1.sales_date,
        s1.country,
        s1.sales_volume,
        s2.fix_costs
    FROM sales s1
    JOIN sales s2 ON s1.country <> 'None' AND s2.country = 'None' 
        AND date_trunc('month', s1.sales_date) = date_trunc('month', s2.sales_date)
    

    自然な自己結合が必要です。参加条件は次のとおりです。

    1. 最初のテーブルなし None レコード(s1.country <> 'None'
    2. 2番目のテーブルのみ None レコード(s2.country = 'None'
    3. 日付:年と月の部分のみを考慮し、日は無視します。これは、date_trunc()を使用して、両方のテーブルの日付を月の最初に正規化することで実現できます。 。だから、例えば'2020-02-15' 結果は'2020-02-01' および'2020-02-29' 結果は'2020-02-01' 比較や結合条件としてもうまく機能します。

    または

    SELECT
        *
    FROM (
        SELECT
            sales_date,
            country,
            sales_volume,
            SUM(fix_costs) OVER (PARTITION BY date_trunc('month', sales_date)) as fix_costs
        FROM sales 
    ) s
    WHERE country <> 'None'
    

    SUM()を使用できます date_trunc()のグループに対するウィンドウ関数 上記のように。次に、Noneをフィルタリングする必要があります その後の記録



    1. SQL FOREIGN KEY CONSTRAINT:初心者のための究極の簡単なガイド

    2. JOINを使用する場合のWHERE句とON

    3. Androidの再発イベントの期間がNULLになるのはなぜですか?

    4. OOPを使用して別の.phpから別の.phpのクラスに$dbを使用するにはどうすればよいですか?