0

この質問には多くのバリエーションがあると思いますが、これにはひねりがあります。

私のプライマリ テーブルには、特定のユーザーの特定の日付の記録されたキロメートルが含まれています。

km_run:

|entry|mnumber|dato |km |ここで、「dato」は特定の日付です。フォーマットは次のようなものです:

|1 |3 |2013-01-01|5.7| |

特定のユーザー ('mnumber') について、1 年の各週の合計を計算したいと考えています。この目的のために、1 から 53 までの週番号だけを含む「ダミー テーブル」を作成しました。

Table `week_list`:
|week|
|1   |
|2   |

等..

このクエリは合計を返しますが、特定の週の「km_run」にエントリがない場合、ゼロを返す方法が見つかりません。

SELECT `week_list`.`week`, WEEKOFYEAR(`km_run`.`dato`),  SUM(`km_run`.`km`)
FROM `week_list` LEFT JOIN `km_run` ON  WEEKOFYEAR(`dato`) = `week_list`.`week`
WHERE `km_run`.`mnumber` = 3 AND `km_run`.`dato` >= '2013-01-01'
 AND `km_run`.`dato` < '2014-01-01'
GROUP BY WEEKOFYEAR(`dato`)

COALESCE( SUM( km),0) を実行しようとしましたが、合計の周りに IFNULL 関数を使用しようとしました。左結合にもかかわらず、week_list のすべてのレコードが sql ステートメントで返されるわけではありません。

結果は次のとおりです。

week | WEEKOFYEAR(`km_run`.`dato`) | SUM(`km_run`.`km`)
1    | 1                           | 58.4
3    | 3                           | 50.7
4    | 4                           | 39.2

ご覧のとおり、0 を返す代わりに 2 週目がスキップされます。

4

1 に答える 1