ホームページ >データベース >mysql チュートリアル >データが欠落している場合でも MySQL で月次レコードを表示するにはどうすればよいですか?

データが欠落している場合でも MySQL で月次レコードを表示するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-06 22:01:02583ブラウズ

How to Show Monthly Records in MySQL Even with Missing Data?

データが欠落している場合でも月次レコードを表示する MySQL クエリ

質問:

ユーザー テーブルから月ごとのレコードを取得する必要がある場合、特定の月のデータが欠落している可能性があります。この問題を解決して、データが含まれているかどうかに関係なく、すべての月を確実に表示するにはどうすればよいですか?

回答:

以下を含む月単位のユーザー レコードを取得するには、どうすればよいですか?エントリのない月の場合、派生テーブルと左結合の組み合わせを使用してソリューションを実装できます。

SELECT COUNT(u.userID) AS total, m.month, YEAR(m.merge_date) AS year
FROM (
           SELECT '2013-01-01' AS merge_date
           UNION SELECT '2013-02-01' AS merge_date
           UNION SELECT '2013-03-01' AS merge_date
           UNION SELECT '2013-04-01' AS merge_date
           UNION SELECT '2013-05-01' AS merge_date
           UNION SELECT '2013-06-01' AS merge_date
           UNION SELECT '2013-07-01' AS merge_date
           UNION SELECT '2013-08-01' AS merge_date
           UNION SELECT '2013-09-01' AS merge_date
           UNION SELECT '2013-10-01' AS merge_date
           UNION SELECT '2013-11-01' AS merge_date
           UNION SELECT '2013-12-01' AS merge_date
          ) AS m
LEFT JOIN users u
       ON MONTH(m.merge_date) = MONTH(u.userRegistredDate)
          AND YEAR(m.merge_date) = YEAR(u.userRegistredDate)
GROUP BY m.merge_date
ORDER BY 1+1;

説明:

  • 派生テーブル「m」は、特定の年のすべての月を表す「merge_date」という名前の列を持つ仮想テーブルを生成します。
  • LEFT JOIN 操作は、「users」テーブルを派生テーブル「m」にリンクします。 "
  • group by 句は、merge_date によって結果を集計し、各月のユーザー数をカウントします。
  • order by 句は、結果を月ごとに昇順に並べ替えるのに使用されます。

左結合を使用すると、クエリは「users」テーブルと派生テーブルの両方からデータを取得し、対応するユーザー レコードがない月も含めてすべての月が結果に含まれるようにします。この方法は、特定の月のデータが欠落している状況に効果的に対処します。

以上がデータが欠落している場合でも MySQL で月次レコードを表示するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。