この質問をどのように表現すればよいか、私にはよくわかりません。null 値を持つ列を含む行を排除する方法は必ずしも必要ではありません。必要なユーザーごとに 1 つの行の結果のみを生成するように、クエリを調整する方法を理解する必要があるだけです。明確にするための背景情報:
さて、users、local_ads (ローカル広告)、local_rev (ローカル収益レポート)、nat_ads (国内広告)、nat_rev (国内収益レポート) の 5 つのテーブルがあります。
毎月、ユーザーは全国収入レポートと地方収入レポートを提出します。ユーザーが月次レポートを作成すると、ローカル レポートと全国レポートの両方に固有のレポート ID が与えられます。report_id と対応する user_id は、それぞれのテーブル (local_rev または nat_rev) に格納されます。
次に、ユーザーは各レポートに広告を送信します。その月のローカル レポート用に送信されたローカル広告は local_ads テーブルに保存され、特定のユーザーの各広告は同じ report_id を共有します。国内広告も同様です。
local_rev テーブルと nat_rev テーブルの両方のすべての広告には、価格とサイズの列があります。
各ユーザーの Local Ad の合計サイズ、Local Ad の数量、Local Ad の合計価格、National Ad の合計サイズ、National Ad の数量、および National Ad の合計価格を生成するクエリを実行しようとしています WHERE month="x."
必要なものに最も近いクエリは次のとおりです。
SELECT u.franchise, lr.lrr_id, CountLocId, TotalPrice, nr.nrr_id, CountNatId, TotalNMoney,
(
TotalPrice + TotalNMoney
)TotalRev
FROM users u
LEFT JOIN local_rev lr ON u.user_id = lr.user_id
LEFT JOIN (
SELECT lrr_id, COUNT( lad_id ) CountLocId, SUM( price ) TotalPrice
FROM local_ads
GROUP BY lrr_id
)la ON lr.lrr_id = la.lrr_id
LEFT JOIN nat_rev nr ON u.user_id = nr.user_id
LEFT JOIN (
SELECT nrr_id, COUNT( nad_id ) CountNatId, SUM( tmoney ) TotalNMoney
FROM nat_ads
WHERE MONTH = 'February'
GROUP BY nrr_id
)na ON nr.nrr_id = na.nrr_id
WHERE lr.month = 'February'
ORDER BY franchise
LIMIT 0 , 30
問題は、 1 か月ではなく毎月、各ユーザーの行を生成していることです。これは、以下の結果で確認できます。結果では、NULL 値を持たない行が必要な行です。したがって、NULL 値を持つ行を削除する方法を理解する必要があります。
userA 84 39 5200 158 NULL NULL NULL
userA 84 39 5200 53 NULL NULL NULL
userA 84 39 5200 182 NULL NULL NULL
userA 84 39 5200 81 5 5900 11100
userB 93 1 100 51 NULL NULL NULL
userB 93 1 100 200 NULL NULL NULL
userB 93 1 100 84 9 5742 5842
そこで、Stackoverflow などで見つけた数十の異なる例を使用してみました。特定のクエリに適用すると、何も機能しません。必要な結果が得られることを期待して、ランダムな調整に何時間も費やしましたが、うまくいきませんでした。ここに投稿するのは私の絶対的な最後の手段です!
長々と申し訳ありませんが、問題の解決に必要なすべての情報を提供したことを確認したかっただけです。手伝ってくれてどうもありがとう。