IN クエリを使用して欠落データのデフォルト値を持つレコードを取得する
IN
句を使用して特定の日付範囲内のユーザーのオンライン アクティビティをクエリする場合、IN
条件内の一部のユーザー ID に OnlineUsage
テーブル内の対応するエントリが存在しない状況が発生することがあります。 これを処理し、欠落データのデフォルト値を返すには、クエリ構造を変更する必要があります。
標準クエリは、一致するレコードを持つ ID の結果のみを返す場合があります。 IN
リストのすべての ID (一致するオンライン使用状況データがない ID も含む) を含めるには、LEFT JOIN
(または同等のもの) を利用するようにクエリを再構築します。 重要なのは、日付範囲条件を WHERE
句から JOIN
条件に移動することです。
SELECT users.Name, users.ID, IFNULL(SUM(OnlineUsage.Minutes), 0) AS MinutesOnline FROM users LEFT JOIN OnlineUsage ON users.ID = OnlineUsage.ID AND OnlineUsage.Date >= '2016-01-01 00:00:00' AND OnlineUsage.Date < '2017-01-01 00:00:00' WHERE users.ID IN (1, 2, 3, 4, 5) -- Your list of IDs here GROUP BY users.ID;
この改訂されたクエリでは、LEFT JOIN
を使用して、すべてのユーザーが確実に含まれるようにします。 IFNULL
関数は、SUM(OnlineUsage.Minutes)
が NULL
を返すケース (オンライン使用状況データを持たないユーザーの場合) を 0
に置き換えることで処理します。 GROUP BY
句は、ユーザーごとに MinutesOnline
を正しく集計するために重要です。 このアプローチでは、完全なデータセットが保証され、オンライン使用記録があるかどうかに関係なく、指定された期間内のすべてのユーザーの一貫した表現が提供されます。
以上が欠損データに対して IN クエリを使用してデフォルト値を持つレコードを取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。