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

SQL:テーブルを結合した後、SUM()関数は間違った値を返します

    問題となっているのはデカルト積です(1つのテーブルの行が他のテーブルの行で乗算されています)。次のアプローチでは、すべてのプロジェクトに、従業員が割り当てられたワークロード(クエリにはemployeeテーブルへの結合が表示されないため、すべての従業員が考慮されます)とタスクがあると想定しています。そうでない場合は、内部結合ではなく外部結合を行うことを検討してください。

    アイデアは、プロジェクト番号に基づいて独自の派生テーブルで各集計を実行することです。次に、派生した各テーブルをプロジェクト番号で結合して、意味のある結果を得ることができます。

    SELECT
    p.NAME,
    w.workload_sum AS "Total Workload",
    e.employee_count AS "Total Employees",
    t.task_count AS "Finished Tasks"
    from p 
    JOIN (select pno, sum(workload) as workload_sum
            from w
           group by pno) w ON (w.pno=p.pnumber)
    JOIN (select pno, count(distinct w.essn) as employee_count
            from w
           group by pno) e ON (e.pno=p.pnumber)
    JOIN (select pno, count(distinct t.name) as task_count
            from t
           group by pno) t ON (t.pno=p.pnumber)
    WHERE t.END_DATE is NOT NULL;
    



    1. 挿入された行だけを更新するトリガー

    2. 特定の実行範囲でSQLServerトリガーを無効にする方法はありますか?

    3. Spark SQL 2.0:有効なPostgreSQLクエリを使用したNullPointerException

    4. 期日が今日の日付と一致するデータベースからのすべてのレコードをカウントします