目的は、売上と値を持つすべての売り手のリストをグリッドに表示することです。LEFT JOINとWHERE句 - 値がNULLのものを含むすべてのレコードを一覧表示する
売り手のリストは、売り上げがない場合でも常に表示する必要があります。次のクエリが正常に動作していることについては
seller | sales | value
John 10 1000
Marie 20 2000
Jamie 15 1500
Arnold 0 0
Peter 0 0
::のような
何か
SELECT tsl.sellers,
COUNT(ts.sales) AS sales,
COALESCE(SUM(ts.value),0) AS value
FROM tab_sellers tsl
LEFT JOIN tab_sales ts ON tsl.id_seller = ts.seller
GROUP BY tsl.seller
私は日付範囲でフィルタする必要があるときに問題があります。
SELECT tsl.sellers,
COUNT(ts.sales) AS sales,
COALESCE(SUM(ts.value),0) AS value
FROM tab_sellers tsl
LEFT JOIN tab_sales ts ON tsl.id_seller = ts.seller
WHERE ts.date_sale BETWEEN '2017-05-01' and '2017-07-04'
GROUP BY tsl.seller
だけジョンとマリーはこの日付範囲内の販売を持っていることを考慮すると、結果は次のとおりです。
seller | sales | value
John 5 500
Marie 10 1000
しかし、意図した結果は次のとおりです。
seller | sales | value
John 5 500
Marie 10 1000
Jamie 0 0
Arnold 0 0
Peter 0 0
私は解決するためのアイデアを高く評価この。
別のWHERE-Statementはどうですか? – Bernhard
LEFT JOINは、INNER JOIN行と、NULLで拡張された不一致の左テーブル行を返します。範囲条件をONにする必要があります。 – philipxy
@philipxy、私の答えと同じです。 –