ホームページ  >  に質問  >  本文

MySQL 接続間隔の年と月のデフォルト値を設定する

私のクエリには問題があります。 2 つのテーブルがあり、それらを結合して最初のテーブルの主キーに基づいた結果を取得したいのですが、最初のテーブルのデータが 1 つ欠落しています。

これは私のヴァイオリンです

ご覧のとおり、月 1 の「xx3」が欠落しています

左右の接続を変えてみましたが結果は同じでした。 ご覧のとおり、coalesce(sum(b.sd_qty),0) を合計に設定する必要があります。qty がない場合は、0 はデフォルト値です。

P粉924915787P粉924915787237日前297

全員に返信(1)返信します

  • P粉287726308

    P粉2877263082024-02-26 09:49:06

    テーブルを異なる日付に相互結合する必要もあります:

    SELECT a.item_code,
           COALESCE(SUM(b.sd_qty), 0) 合計,
           DATE_FORMAT(d.sd_date, '%m-%Y') month_year
    項目aから
    クロス結合 (
      SELECT DISTINCT sd_date
      販売詳細から
      WHERE sd_date >= '2020-04-01' - 間隔 3 か月および sd_date < '2020-05-01'
    ) d 
    LEFT JOIN sales_details b 
    ON a.item_code = b.item_code AND b.sd_date = d.sd_date
    GROUP BY month_year, a.item_code
    ORDER BY month_year, a.item_code;

    あるいは、MySql 8.0 の場合は、再帰的 CTE を使用して、結果が必要なすべての月の開始日を返します。これをテーブルに相互結合できます。

    WITH RECURSIVE 日付 AS (
      '2020-04-01' を選択 - sd_date として 3 か月間隔
      すべてを結合する
      sd_date 間隔 1 か月を選択
      FROMの日付
      WHERE sd_date 間隔 1 か月 < '2020-05-01'
    )
    SELECT a.item_code,
           COALESCE(SUM(b.sd_qty), 0) total,
           DATE_FORMAT(d.sd_date, '%m-%Y') month_year
    FROM item a CROSS JOIN dates d 
    LEFT JOIN sales_details b 
    ON a.item_code = b.item_code AND DATE_FORMAT(b.sd_date, '%m-%Y') = DATE_FORMAT(d.sd_date, '%m-%Y')
    GROUP BY month_year, a.item_code
    ORDER BY month_year, a.item_code;

    表示デモ

    返事
    0
  • キャンセル返事