2

日付の表を使用して、週に基づいてさまざまな列を数えようとしています。私はなんとか1つの列でそれを行うことができ、うまく機能します。しかし、複数の列を数えていると、間違った結果または重複した結果が得られます。加入したからだと思います。

これは、期待どおりに 1 つの列に対して機能します。

 SELECT
 DATE_FORMAT(thedate, '%u') as week
,COUNT(t.completed_date) as completed

FROM datetable
LEFT JOIN projects t ON t.completed_date = thedate
WHERE thedate BETWEEN YEAR(NOW()) AND NOW()
GROUP BY YEARWEEK(thedate,7)

選択に追加,COUNT(t.sales_date) as salesすることで、完了数と販売数が重複します。

このサンプル (プロジェクト) に基づく

| id | completed_date | sales_date |
| 1  | NULL           | NULL       |
| 2  | NULL           | 2013-08-26 |
| 3  | NULL           | 2013-08-28 |
| 4  | 2013-09-06     | NULL       |

を探しています

| week | completed | sales |
| 34   | 0         | 0     |
| 35   | 0         | 2     |
| 36   | 1         | 0     |

日付がない場合、すべての日付が 0 である必要があるため、日付テーブルを使用しています。サブクエリで解決できると思いますが、このクエリでもカウントする必要がある他の 12 の日付フィールドがあります (サンプルから除外されています)。

多くのサブクエリを使用するよりも、これを解決するためのより良い方法はありますか? 私のSQLは少し錆びています。

4

1 に答える 1